Tags give the ability to mark specific points in history as being important
  • 1.0.0-alpha.5.0.2 protected

    API Docs are always available at docs.redistack.info

    Patch

    • RedisConnection.sendCommandsImmediately is now correctly public (fae8eada)
  • 1.0.0-alpha.5.0.1 protected
    aeae1f6c · Properly export module ·

    API Docs are always available at docs.redistack.info

    Patch

    • RediStackTestUtils is now correctly an importable module (aeae1f6c)
  • 1.0.0-alpha.5 protected

    API Docs are always available at docs.redistack.info

    Major

    • The library module was renamed from RedisNIO to RediStack !73
    • RedisNIOError was renamed to RedisClientError !72
      • .responseConversion(to:) was renamed to .failedRESPConversion(to:)
      • .unsupportedOperation(method:message:) was removed
    • RedisCommandHandler is no longer open (now public final) !55
    • RedisCommandContext was renamed to RedisCommand !66
    • RedisCommand.command was renamed to message and the initializer signature updated to match its properties (26057638)
    • RedisCommandHandler.init(logger:) is now .init(initialQueueCapacity:logger:) !66
    • The names for the ChannelPipeline handlers are now explicitly named !66
      • RediStack.OutgoingHandler
      • RediStack.IncomingHandler
      • RediStack.CommandHandler
    • The Redis namespace enum was removed !71
      • The makeConnection factory method was moved to RedisConnection.connect
        • This method now requires a NIO.EventLoop instance, no longer creating a MultiThreadedEventLoopGroup for you
        • This method also now supports overriding the default NIO.ClientBootstrap and is the preferred way of building your own pipelines
    • RedisConnection.init is now internal, all connections are made with RedisConnection.connect !71
    • A few different logs have had their severity adjusted
      • Sending a command while the connection is closed is now a warning !71
    • Sorted Set methods zadd, zunionstore, and zinterstore, have stronger type safety with options defined as enums !70 and (0ecb3c1e)
    • RESPValueConvertible is no longer used as an existential !69
      • This also changes RedisConnection.send(command:with:) to require the RESPValue arguments up front, rather than doing the conversion for you
    • RESPValue and RESPValueConvertible had many internal implementations changed !67
      • RESPValue.array no longer uses ContiguousArray
      • ContiguousArray is no longer RESPValueConvertible
      • several of the computed properties on RESPValue will no longer behave exactly the same, or have moved to the new RediStackTestUtils module
    • Redis.makeDefaultClientBootstrap(using:) was renamed and moved to ClientBootstrap.makeRedisTCPClient(group:) !64
      • The implementation for adding the "default" RESP handlers is now publicly available with Channel.addBaseRedisHandlers()
    • RESPTranslator saw a major refactor !63
      • It is now a struct instead of an enum
      • ByteBuffer.writeRESPValue(_:) is a new method carrying most of the implementation for writing out RESPValue
      • RESPTranslator.ParsingResult was removed
      • RESPTranslator now updates the passed in ByteBuffer.readerIndex on successful parses
      • RESPTranslator.parseBytes(from:) uses the passed in ByteBuffer entirely for position and recursion
    • RESPValueConvertible.init(_:) was renamed to .init(fromRESP:) !56

    Minor

    • A new module RediStackTestUtils is available for some helpers with writing tests for RediStack !67

    Patch

    • The observable behavior of closing a channel should be more straight forward and dependable !71
  • 1.0.0-alpha.3 protected

    Major

    • NIO is no longer exported, you will need to explicitly import NIO !57
    • errorCaught in RedisCommandHandler now fails all pending responses, and does not increment RedisMetrics.commandFailureCount !59
    • EventLoopFuture.mapFromRESP has been renamed to `EventLoopFuture.convertFromRESPValue !60

    Minor

    • The APPEND command is now available with the append(_:to:) method !61
  • 1.0.0-alpha.2.1 protected

    Minor

    • Added new RedisConnection.defaultPort static property set to 6379 for users to reference !51
  • 1.0.0-alpha.2 protected

    Major

    • Added explicit conformance to RESPValueConvertible for Foundation.Data to resolve a bug where it received conformance from Collection (!50)
  • 1.0.0-alpha.1.1.1 protected

    Patch

    • Fix warning from default in switch (788f69de)
  • 1.0.0-alpha.1.1 protected

    Minor

    • Improve debugging of RESPValue (d4584924)
  • 1.0.0-alpha.1 protected
    23a8d445 · Update README ·
  • 0.10.0 protected

    This release introduces a "minor" breaking change that is large enough that it warrants releasing it as a major revision.

    SE-0226 Package Manager Target Dependency Resolution introduces a change to expected form of packages and their naming.

    To be compliant with future changes to SPM - it was decided to rename the package from redis-nio (matching the module name) to swift-redis-nio-client to match the repo instead.

    Major

    • Renamed package from redis-nio to swift-redis-nio-client !47
  • 0.9.0 protected

    This release brings a major breaking change. GitHub will forward most requests from the previous repository URL to the new one - but in code it has more specific ramifications.

    This is necessary to align with the goals of the SSWG and to solve problems that will exist in the future before it causes real issues.

    For further context into the discussion, see the following threads on the Swift Forums:

    All changes were made in the MR !45

    Major

    • Renamed the repo in GitHub from nio-redis to swift-redis-nio-client
    • Renamed the package from nio-redis to redis-nio
    • Renamed the NIORedis module to RedisNIO
    • Renamed NIORedisError to RedisNIOError
    • Changed references to NIORedis to RedisNIO in object labels such as NIO Channel Handlers & Loggers

    Minor

    • Changed all references in copyright blocks, project files (README, LICENSE, etc.) to refer to the project as RedisNIO
  • 0.8.0 protected

    Major

    • Added SwiftMetrics dependency (!41)
    • Changed ChannelPipeline registration of handlers for RedisConnection to now have a reliable name (d0da3e76)

    Minor

    • Added bzpopmin and bzpopmax convenience methods for sorted sets !42
    • Added brpop, blpop, and brpoplpush convenience methods for lists !43

    Patch

    • Update legal notices for SwiftLog & SwiftMetrics (b0d0882e)
    • Fixed minor comment issues (d9d61baf)
  • 0.7.0 protected

    Breaking Changes

    • Static factory methods for building a default Redis Channel pipeline and RedisConnection have been moved to a new Redis enum namespace !38
      • Their method signatures have also seen some changes
    • Encoding / Decoding RESP has been separated from the Channel pipelines !39
      • RESPTranslator is a new type that implements the encoding/decoding of RESP formatted bytes to Swift types
      • RESPDecoder has been renamed to RedisByteDecoder and is just a ByteToMessageDecoder
      • RESPEncoder has been renamed to RedisMessageEncoder and is just a MessageToByteEncoder
    • Error handling is now more straight forward !37
      • RedisError is to represent only errors returned by Redis itself in command responses
      • NIORedisError represents errors thrown within the library
      • RESPTranslator.ParsingError represents errors thrown while parsing bytes
    • RedisPipeline has been removed !36
      • This feature may be re-introduced in the future, but for now is left up to higher level packages to implement
    • RESPValue now holds references to ByteBuffers rather than Data !34
    • Foundation.Data is no longer RESPValueConvertible !30

    Additions

    • RedisConnection now has a property sendCommandsImmediately that 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.
    • RESPValue now 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 .integer storage instances)

    Implementation Changes

    • SwiftLog has been anchored to version 1.0.0
    • RESPTranslator now uses ByteBufferViews and ByteBufferSlices internally, so there should be a performance increase !34
  • 0.6.0 protected

    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

    • RedisCommandExecutor is now RedisClient !24
    • RedisConnection is no longer a protocol !24
      • NIORedisConnection has taken the name to act as the primary concrete implementation for Redis connections
        • the isClosed property has been renamed to isConnected
    • RedisPipeline is no longer a protocol !26
      • NIORedisPipeline has taken the name to act as the primary concrete implementation for Redis pipelines
    • RedisDriver is no longer a thing !25
      • Connections are now made with a static method on RedisConnection

    Fixes

    • RedisConnection.close() has had some tweaks to resolve a state where closing a connection results in error and the QUIT command could not be sent !24
  • 0.5.0 protected

    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 @inlinable attribute 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 resolving RESPValue now have an extension method that can convert to a type you desire or fail with a RedisError: .mapFromRESP(to:) (5a35a918)
    • New convenience command methods
  • 0.4.0 protected

    Breaking Changes

    • Removed DispatchRedis package (5c32b97a)
    • RedisConnection and RedisPipeline have become protocols. The default implementations have been renamed to NIORedisConnection and NIORedisPipeline (6b30127f)
    • The [select(_:)] command convenience method has been renamed to select(database:) (6b30127f)
    • RedisPipeline.enqueue(command:arguments:) has been renamed to RedisPipeline.enqueue(operation:) which is now a closure that provides a RedisCommandExecutor so all of the command convenience methods are made available. (6b30127f)
      • Commands are still queued and not executed immediately.
    • RedisConnection.command(_:arguments:) is no longer supported (6b30127f)

    New Additions

    • swift-log is now added, and default logging implementations have been added (73d5930f)
      • 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
    • RedisCommandExecutor protocol that creates an interface for objects responsible for sending commands (6b30127f)
      • NIORedisConnection and NIORedisPipeline both conform to this protocol
    • RESPConvertible conformance to Optional (618481fe)
    • New command convenience methods (9f505be4)
      • echo
      • ping
      • swapdb

    Fixes

    • NIORedisConnection.close() to send a "QUIT" command to Redis before closing, and properly checking if the connection has been closed already (68254519)
  • 0.3.0 protected

    Release for tag 0.3.0

  • 0.2.0 protected

    Release for tag 0.2.0

  • 0.1.0 protected

    Release for tag 0.1.0