Releases: swift-server/RediStack
Releases · swift-server/RediStack
NIORedis 0.7.0: The Proposal
Breaking Changes
- Static factory methods for building a default Redis
Channelpipeline andRedisConnectionhave been moved to a newRedisenum namespace (#38)- Their method signatures have also seen some changes
- Encoding / Decoding RESP has been separated from the Channel pipelines (#39)
RESPTranslatoris a new type that implements the encoding/decoding of RESP formatted bytes to Swift typesRESPDecoderhas been renamed toRedisByteDecoderand is just aByteToMessageDecoderRESPEncoderhas been renamed toRedisMessageEncoderand is just aMessageToByteEncoder
- Error handling is now more straight forward (#37)
RedisErroris to represent only errors returned by Redis itself in command responsesNIORedisErrorrepresents errors thrown within the libraryRESPTranslator.ParsingErrorrepresents errors thrown while parsing bytes
RedisPipelinehas been removed (#36)- This feature may be re-introduced in the future, but for now is left up to higher level packages to implement
RESPValuenow holds references toByteBuffersrather thanData(#34)Foundation.Datais no longerRESPValueConvertible(#30)
Additions
RedisConnectionnow has a propertysendCommandsImmediatelythat controls the timing of when commands written to the network socket should be flushed and sent to Redis. (#36)- The default is
true, which means every command will trigger a flush.
- The default is
RESPValuenow has the following computed properties converted from the underlying storage (#30, #34):bytes: [UInt8]?data: Data?string: String?(this isn't new, but now also works with.integerstorage instances)
Implementation Changes
SwiftLoghas been anchored to version1.0.0RESPTranslatornow usesByteBufferViews andByteBufferSlices internally, so there should be a performance increase (#34)
NIORedis 0.6.0: Simple Connections
Motivation
Much of the exposed types in the library were wordy, unclear, or not fulfilling strong use cases - so a revisit was done to the foundational protocols: RedisCommandExecutor, RedisConnection, RedisPipeline - as well as their implementations and RedisDriver.
Breaking Changes
RedisCommandExecutoris nowRedisClient(#24)RedisConnectionis no longer a protocol (#24)NIORedisConnectionhas taken the name to act as the primary concrete implementation for Redis connections- the
isClosedproperty has been renamed toisConnected
- the
RedisPipelineis no longer a protocol (#26)NIORedisPipelinehas taken the name to act as the primary concrete implementation for Redis pipelines
RedisDriveris no longer a thing (#25)- Connections are now made with a static method on
RedisConnection
- Connections are now made with a static method on
Fixes
RedisConnection.close()has had some tweaks to resolve a state where closing a connection results in error and theQUITcommand could not be sent (#24)
NIORedis 0.5.0: Everything is Convenient
Motivation
The goal of this release was to bring feature parity with Vapor's Redis implementation and to have as Swifty of an API as possible, with consistent documentation and minimal performance impact.
Breaking Changes
- Every command extension has the
@inlinableattribute to remove method call overhead as much as possible - Every existing command extension up to this point has been re-evaluated with the function names, parameter labels, and return types.
New Additions
EventLoopFutures resolvingRESPValuenow have an extension method that can convert to a type you desire or fail with aRedisError:.mapFromRESP(to:)(5a35a91)- New convenience command methods
NIORedis 0.4.0: POP and SSWG
Breaking Changes
- Removed
DispatchRedispackage (5c32b97) RedisConnectionandRedisPipelinehave become protocols. The default implementations have been renamed toNIORedisConnectionandNIORedisPipeline(6b30127)- The
select(_:)command convenience method has been renamed toselect(database:)(6b30127) RedisPipeline.enqueue(command:arguments:)has been renamed toRedisPipeline.enqueue(operation:)which is now a closure that provides aRedisCommandExecutorso all of the command convenience methods are made available. (6b30127)- Commands are still queued and not executed immediately.
RedisConnection.command(_:arguments:)is no longer supported (6b30127)
New Additions
swift-logis now added, and default logging implementations have been added (73d5930)- Most logging is done with
debug - Each logging instance can be overridden in constructors of objects that log
- Each logger uses a
NIORedis.prefix in their label
- Most logging is done with
RedisCommandExecutorprotocol that creates an interface for objects responsible for sending commands (6b30127)NIORedisConnectionandNIORedisPipelineboth conform to this protocol
RESPConvertibleconformance toOptional(618481f)- New command convenience methods (9f505be)
Fixes
NIORedisConnection.close()to send a"QUIT"command to Redis before closing, and properly checking if the connection has been closed already (6825451)
NIORedis 0.3.0: Housekeeping
Merge pull request #13 from Mordil/set-commands Add all Set commands with unit tests
NIORedis 0.2.0: The Return Pitch
Merge pull request #5 from Mordil/rev-2 Rev 2
NIORedis 0.1.0: The First Pitch
Update pitch doc to include references to pipelines and include links