Releases: swift-server/RediStack
RediStack 1.0.0 Alpha 10
API Docs are always available at docs.redistack.info
Major
- Dozens of the convenience command methods that return
RESPValuetypes now have an overload for mapping to a desired end type !106 - The
RESPValue.init(bulk:)initializer has been replaced by a single genericinit(from:)form !108 RedisClientErroris now an enum-like-struct to allow for library evolution !118RESPTranslator.ParsingErroris now an enum-like-struct to allow for library evolution !123- The
isConnectedproperty is no longer a requirement for theRedisClientprotocol #73
Minor
- Add
EXISTScommand method !110 - Add
TTLandPTTLcommand methods !114 - Add
SETNXcommand method !115 RedisConnectionPoolis a new connection type for pooledRedisConnectionsthat conforms toRedisClient!116RedisKeyis nowExpressibleByStringInterpolation!119- Add
PSETEXandSETEXcommand methods !121 ActiveConnectionGauge.currentCountis now public 86d5466- Add new
SEToverload that allows providing all options as currently outlined by Redis 6.0 #67PSETEX,SETEX, etc. may become deprecated should Redis choose to deprecate them in favor ofSETwith 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.initis now@inlinable!122
Misc
RediStack 1.0.0 Alpha 9
API Docs are always available at docs.redistack.info
Major
- The
isConnectedproperty is no longer a requirement for theRedisClientprotocol #73 - Dozens of the convenience command methods that return
RESPValuetypes now have an overload for mapping to a desired end type !106 - The
RESPValue.init(bulk:)initializer has been replaced by a single genericinit(from:)form !108
RediStack 1.0.0 Alpha 8
API Docs are always available at docs.redistack.info
Major
- All commands that require a
Stringkey is now a type-safe representation calledRedisKey!93- It conforms to:
Hashable,RESPValueConvertible,Codable,Comparable,Equatable,ExpressibleByStringLiteralandRawRepresentable RESPValuenow has an init overload forRedisKey
- It conforms to:
- The
RedisClientprotocol now has anisConnected: Boolreadonly property requirement !95 - All timeout related command parameters now use the
NIO.TimeAmounttype, rather thanInt!96 - The
zaddcommand API has been reworked to be more expressive and type-safe !97RedisSortedSetAddOptionis nowRedisZaddInsertBehaviorRedisZaddReturnBehaviorhas been added, instead of a Boolean parameterlet 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
RedisZLexBoundandRedisZScoreBoundenumslet client = ... client.lrange(from: "my_list", indices: 3...5)
- The range based APIs also have been changed to be type-safe instead of the old String based API with the
EventLoopFuture.convertFromRESPValuehas been renamed to be an overload ofmap!104
Minor
- Added the
authorizecommand method toRedisClient!94 CollectionofRESPValuenow have severalmapoverloads to convert the RESPValue to other types that areRESPValueConvertible!103
Patch
- Updated SwiftMetrics version to be
1.0.0 ..< 3.0.0(973a9162)
RediStack 1.0.0 Alpha 7.2
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
API Docs are always available at docs.redistack.info
Patch
- Fixed deprecation warnings of SwiftNIO's
Atomicusage (8d85cb2b)
RediStack 1.0.0 Alpha 7
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
RedisClienthas 2 new requirements:logger: Logging.Loggerreadonly propertysetLogging(to: Logging.Logger)method
RedisCommandHandlerno longer supports logging- The init method has been changed to no longer accept a
Logger
- The init method has been changed to no longer accept a
RedisMessageEncoderno 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.initmethod
Minor
RedisClienthas a default extension methodlogging(to:)that is chainable and callssetLogging(to:)RedisConnectionnow has a publicid: UUIDpropertyRedisConnectionhas moretracelogs- Some
RedisConnectiondebuglogs re-adjusted totrace - Some
RedisConnectionlogs had their level increased to account for being the sole source of logs now
Patch
- The
RedisConnectionmetadata id value is now correctly stable. - Corrected some code documentation, specifically around logging.
RediStack 1.0.0 Alpha 6.1
API Docs are always available at docs.redistack.info
Minor
- Several methods now have variadic overloads !87
getnow has a generic overload for anyRESPValueConvertibletype !86- The
Stringspecialized implementation is still available
- The
Patch
- Unnecessary assertions in
RedisCommandHandlerhave been removed !85
RediStack 1.0.0 Alpha 6
API Docs are always available at docs.redistack.info
Major
RedisIntegrationTestCasenow has properties that can be overridden in subclasses for specializing how to connect to Redis !74RESPTranslator.ParsingErrorhas two new cases:invalidBulkStringSizeandbulkStringSizeMismatch!82RedisMetrics.activeConnectionCountis no longer anIntand instead is a new specialized wrapper class calledActiveConnectionGauge!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 publicincrement(by:)/decrement(by:)methods
Minor
RESPValuenow conforms toEquatable!76RedisErrornow conforms toEquatable!77RESPValue.init(bulk:)now accepts a wider range of values !81- The
Stringoverload is nowString? - The
Intoverload is now generic with a constraint ofFixedWidthInteger
- The
Patch
- Fixed a data race with
RedisMetrics.activeConnectionCountthat was caught with the new thread sanitizer test passes !84- The job that caught the error: https://gitlab.com/Mordil/swift-redi-stack/-/jobs/302079265
RediStack 1.0.0 Alpha 5.0.2
API Docs are always available at docs.redistack.info
Patch
RedisConnection.sendCommandsImmediatelyis now correctlypublic(fae8eada)
RediStack 1.0.0 Alpha 5.0.1
API Docs are always available at docs.redistack.info
Patch
RediStackTestUtilsis now correctly an importable module (aeae1f6c)