swift-nio-redis is a port of the Noze.io redis module.
The NIO implementation has been optimized for performance.
This Noze.io RedisParser
stream:
let parser = RedisParser()
stream! | parser | Writable { values, done in
handle(replies: values)
done(nil)
}
This is essentially replaced by the
RESPChannelHandler.
Instead of piping via |
, it can be injected into the
Swift NIO channel pipleline like so:
_ = bootstrap.channelInitializer { channel in
channel.pipeline
.configureRedisPipeline()
.then {
channel.pipeline.add(YourRedisHandler())
}
}
Your handler will then receive RESPValue enums as the "readable input", and it can emit RESPEncodable values are the "writable output".
A RESPValue
is just an enum with the on-the-write datatypes supported
by RESP:
simpleString
(aByteBuffer
)bulkString
(aByteBuffer
ornil
)integer
array
(aContiguousArray
ofRESPValue
s)error
(an error)
The primary RESPEncodable
is again a RESPValue
, but
Int
's, String
's, Data
's etc can also be directly written
w/o having to wrap them in a RESPValue
.
For a full example on how to use the protocol implementation, a Redis client module is provided as part of this package.
Besides the binary variant, the Redis protocol also supports a "Telnet mode". A basic implementation of that is included, the major piece lacking is quoted strings.