Skip to content

Latest commit

 

History

History
63 lines (48 loc) · 1.64 KB

README.md

File metadata and controls

63 lines (48 loc) · 1.64 KB

SwiftNIO Redis - Protocol Implementation

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 (a ByteBuffer)
  • bulkString (a ByteBuffer or nil)
  • integer
  • array (a ContiguousArray of RESPValues)
  • 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.

Example

For a full example on how to use the protocol implementation, a Redis client module is provided as part of this package.

Telnet Mode

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.