Skip to content

Releases: swift-server/RediStack

RediStack 1.0.0 Alpha 9

11 Apr 03:01
b462bdc
Compare
Choose a tag to compare
Pre-release

API Docs are always available at docs.redistack.info

Major

  • The isConnected property is no longer a requirement for the RedisClient protocol #73
  • Dozens of the convenience command methods that return RESPValue types now have an overload for mapping to a desired end type !106
  • The RESPValue.init(bulk:) initializer has been replaced by a single generic init(from:) form !108

RediStack 1.0.0 Alpha 8

12 Mar 04:19
b08ad54
Compare
Choose a tag to compare
Pre-release

API Docs are always available at docs.redistack.info

Major

  • All commands that require a String key is now a type-safe representation called RedisKey !93
    • It conforms to: Hashable, RESPValueConvertible, Codable, Comparable, Equatable, ExpressibleByStringLiteral and RawRepresentable
    • RESPValue now has an init overload for RedisKey
  • The RedisClient protocol now has an isConnected: Bool readonly property requirement !95
  • All timeout related command parameters now use the NIO.TimeAmount type, rather than Int !96
  • The zadd command API has been reworked to be more expressive and type-safe !97
    • RedisSortedSetAddOption is now RedisZaddInsertBehavior
    • RedisZaddReturnBehavior has been added, instead of a Boolean parameter
      let client = ...
      client.zadd(
        (element, 3),
        to: "my_sorted_set",
        inserting: .onlyNewElements,
        returning: .insertedElementsCount
      )
  • The range command APIs for SortedSet and List types in Redis have been reworked to be more expressive with the Swift range syntax !98
    • The range based APIs also have been changed to be type-safe instead of the old String based API with the RedisZLexBound and RedisZScoreBound enums
      let client = ...
      client.lrange(from: "my_list", indices: 3...5)
  • EventLoopFuture.convertFromRESPValue has been renamed to be an overload of map !104

Minor

  • Added the authorize command method to RedisClient !94
  • Collection of RESPValue now have several map overloads to convert the RESPValue to other types that are RESPValueConvertible !103

Patch

  • Updated SwiftMetrics version to be 1.0.0 ..< 3.0.0 (973a9162)

RediStack 1.0.0 Alpha 7.2

07 Mar 19:14
bf9a1cd
Compare
Choose a tag to compare
Pre-release

API Docs are always available at docs.redistack.info

Patch

  • Updated SwiftMetrics version to be 1.0.0 ..< 3.0.0 (bf9a1cd9)

RediStack 1.0.0 Alpha 7.1

17 Dec 05:26
8d85cb2
Compare
Choose a tag to compare
Pre-release

API Docs are always available at docs.redistack.info

Patch

  • Fixed deprecation warnings of SwiftNIO's Atomic usage (8d85cb2b)

RediStack 1.0.0 Alpha 7

14 Dec 00:05
Compare
Choose a tag to compare
Pre-release

API Docs are always available at docs.redistack.info

All changes made in this tag were from Merge Request !92.

Logging is now more dynamic - as RedisClient loggers can be changed, rather than being static at initialization.

This is particularly useful for attaching metadata from a logger you already have, so you can correlate the logs generated by RediStack.

For example:

let connection = RedisConnection.connect(...)
let response = connection
    .logging(to: myRequestLogger) // this logger has a `requestID` metadata element
    .ping() // logs from RedisConnection while fulfilling this command will also include the `requestID` metadata
    .wait()

Major

  • RedisClient has 2 new requirements:
    • logger: Logging.Logger readonly property
    • setLogging(to: Logging.Logger) method
  • RedisCommandHandler no longer supports logging
    • The init method has been changed to no longer accept a Logger
  • RedisMessageEncoder no longer supports logging
    • The init method has been changed to just an empty init
  • The exact timing of when certain logs and metrics has been tweaked slightly in the RedisConnection.init method

Minor

  • RedisClient has a default extension method logging(to:) that is chainable and calls setLogging(to:)
  • RedisConnection now has a public id: UUID property
  • RedisConnection has more trace logs
  • Some RedisConnection debug logs re-adjusted to trace
  • Some RedisConnection logs had their level increased to account for being the sole source of logs now

Patch

  • The RedisConnection metadata id value is now correctly stable.
  • Corrected some code documentation, specifically around logging.

RediStack 1.0.0 Alpha 6.1

27 Oct 07:10
Compare
Choose a tag to compare
Pre-release

API Docs are always available at docs.redistack.info

Minor

  • Several methods now have variadic overloads !87
  • get now has a generic overload for any RESPValueConvertible type !86
    • The String specialized implementation is still available

Patch

  • Unnecessary assertions in RedisCommandHandler have been removed !85

RediStack 1.0.0 Alpha 6

24 Sep 03:38
Compare
Choose a tag to compare
Pre-release

API Docs are always available at docs.redistack.info

Major

  • RedisIntegrationTestCase now has properties that can be overridden in subclasses for specializing how to connect to Redis !74
  • RESPTranslator.ParsingError has two new cases: invalidBulkStringSize and bulkStringSizeMismatch !82
  • RedisMetrics.activeConnectionCount is no longer an Int and instead is a new specialized wrapper class called ActiveConnectionGauge !84
    • This is to address the data race found by the thread sanitizer that now runs on test passes
    • It maintains an internal Atomic<Int> count that can be modified with the public increment(by:)/decrement(by:) methods

Minor

  • RESPValue now conforms to Equatable !76
  • RedisError now conforms to Equatable !77
  • RESPValue.init(bulk:) now accepts a wider range of values !81
    • The String overload is now String?
    • The Int overload is now generic with a constraint of FixedWidthInteger

Patch

RediStack 1.0.0 Alpha 5.0.2

13 Jul 03:42
Compare
Choose a tag to compare
Pre-release

API Docs are always available at docs.redistack.info

Patch

  • RedisConnection.sendCommandsImmediately is now correctly public (fae8eada)

RediStack 1.0.0 Alpha 5.0.1

11 Jul 21:44
Compare
Choose a tag to compare
Pre-release

API Docs are always available at docs.redistack.info

Patch

  • RediStackTestUtils is now correctly an importable module (aeae1f6c)

RediStack 1.0.0 Alpha 5

11 Jul 21:44
Compare
Choose a tag to compare
Pre-release

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 (2605763)
  • 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 (0ecb3c1)
  • 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