Skip to content

Releases: swift-server/RediStack

RediStack 1.0.0 Alpha 10

04 Jun 17:28
8b75ef7

Choose a tag to compare

Pre-release

API Docs are always available at docs.redistack.info

Major

  • 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
  • RedisClientError is now an enum-like-struct to allow for library evolution !118
  • RESPTranslator.ParsingError is now an enum-like-struct to allow for library evolution !123
  • The isConnected property is no longer a requirement for the RedisClient protocol #73

Minor

  • Add EXISTS command method !110
  • Add TTL and PTTL command methods !114
  • Add SETNX command method !115
  • RedisConnectionPool is a new connection type for pooled RedisConnections that conforms to RedisClient !116
  • RedisKey is now ExpressibleByStringInterpolation !119
  • Add PSETEX and SETEX command methods !121
  • ActiveConnectionGauge.currentCount is now public 86d5466
  • Add new SET overload that allows providing all options as currently outlined by Redis 6.0 #67
    • PSETEX, SETEX, etc. may become deprecated should Redis choose to deprecate them in favor of SET with options

Patch

  • Parsing RESP in general is now more performant !109
  • Parsing RESP BulkStrings are now more performant !111
  • Fix indexing while parsing RESP SimpleString !112
  • Correctly diagnose parsing RESP Integer errors !113
  • Generic RESPValue.init is now @inlinable !122

Misc

  • CI now runs against Swift 5.3 nightly snapshots b3bc95f
  • CI now runs against new CentOS 8, Ubuntu 20.04, and Amazon Linux 2 snapshots c699aca
  • URLs in the project should now correctly link without redirects !117

RediStack 1.0.0 Alpha 9

11 Apr 03:01
b462bdc

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

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

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

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

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

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

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

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

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)