swift-nio-redis/Sources/NIORedis
Helge Heß ad70fc06ca
Do not use @inline(__always)
Use @inlinable instead, or let the compiler be smart.
Also make more public things @inlinable for speedz.
2021-03-08 16:27:49 +01:00
..
ByteBufferExtras.swift Fix the `write(integerAsString:as:)` / `set` 2021-03-08 16:19:49 +01:00
README.md Initial drop 2018-04-11 00:27:29 +02:00
RESPChannelHandler.swift Do not use @inline(__always) 2021-03-08 16:27:49 +01:00
RESPEncodable.swift Do not use @inline(__always) 2021-03-08 16:27:49 +01:00
RESPParser.swift Do not use @inline(__always) 2021-03-08 16:27:49 +01:00
RESPPipelineSetup.swift Do not use @inline(__always) 2021-03-08 16:27:49 +01:00
RESPValue.swift Do not use @inline(__always) 2021-03-08 16:27:49 +01:00

README.md

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.