SwiftNIO Redis is a Swift package that contains a high performance
Redis protocol
implementation for
SwiftNIO.
This is a standalone project and has no other dependencies but
SwiftNIO.
Apart from the protocol implementation which can encode and decode
RESP (REdis Serialization Protocol),
we also provide a Redis client module
build on top.
What is Redis?
Redis is a highly scalable in-memory data structure store,
used as a database, cache and message broker.
For example it can be used to implement a session store backing a web backend
using its “expiring keys” feature,
or it can be used as a relay to implement a chat server using its builtin
PubSub
features.
This Swift package includes the RESP protocol implementation.
A simple Redis client can be found on
swift-nio-redis-client.
We also provide an actual Redis Server
written in Swift, using SwiftNIO and SwiftNIO Redis.
Performance
This implementation is focused on performance.
It tries to reuse NIO ByteBuffers as much as possible to avoid copies.
The parser is based on a state machine, not on a buffering
ByteToMessageDecoder/Encoder.
That doesn’t make it nice, but efficient ;-)
Importing the module using Swift Package Manager
An example Package.swift importing the necessary modules:
The RESP protocol is implemented as a regular
ChannelHandler, similar to NIOHTTP1.
It takes incoming ByteBuffer data, parses that, and emits RESPValue
items.
Same the other way around, the user writes RESPValue (or RESPEncodable)
objects, and the handler renders such into ByteBuffers.
The
protocol implementation
is considered complete. There are a few open ends
in the telnet variant, yet the regular binary protocol is considered done.
Who
Brought to you by
ZeeZide.
We like
feedback,
GitHub stars,
cool contract work,
presumably any form of praise you can think of.
SwiftNIO Redis
SwiftNIO Redis is a Swift package that contains a high performance Redis protocol implementation for SwiftNIO. This is a standalone project and has no other dependencies but SwiftNIO.
Apart from the protocol implementation which can encode and decode RESP (REdis Serialization Protocol), we also provide a Redis client module build on top.
What is Redis? Redis is a highly scalable in-memory data structure store, used as a database, cache and message broker. For example it can be used to implement a session store backing a web backend using its “expiring keys” feature, or it can be used as a relay to implement a chat server using its builtin PubSub features.
This Swift package includes the RESP protocol implementation. A simple Redis client can be found on swift-nio-redis-client. We also provide an actual Redis Server written in Swift, using SwiftNIO and SwiftNIO Redis.
Performance
This implementation is focused on performance. It tries to reuse NIO
ByteBuffer
s as much as possible to avoid copies.The parser is based on a state machine, not on a buffering
ByteToMessageDecoder
/Encoder. That doesn’t make it nice, but efficient ;-)Importing the module using Swift Package Manager
An example
Package.swift
importing the necessary modules:Using the SwiftNIO Redis protocol handler
The RESP protocol is implemented as a regular
ChannelHandler
, similar toNIOHTTP1
. It takes incomingByteBuffer
data, parses that, and emitsRESPValue
items. Same the other way around, the user writesRESPValue
(orRESPEncodable
) objects, and the handler renders such intoByteBuffer
s.The NIORedis module has a litte more information.
To add the RESP handler to a NIO Channel pipeline, the
configureRedisPipeline
method is called, e.g.:Status
The protocol implementation is considered complete. There are a few open ends in the
telnet
variant, yet the regular binary protocol is considered done.Who
Brought to you by ZeeZide. We like feedback, GitHub stars, cool contract work, presumably any form of praise you can think of.