SwiftNIO Redis 是一个 Swift 包,它包含一个高性能的 Redis 协议 实现,适用于 SwiftNIO。 这是一个独立项目,除了 SwiftNIO 之外没有其他依赖项。
除了可以编码和解码 RESP (REdis 序列化协议) 的协议实现之外,我们还提供了一个基于其构建的 Redis 客户端模块。
什么是 Redis? Redis 是一个高度可扩展的内存数据结构存储,用作数据库、缓存和消息代理。 例如,它可以使用其“过期键”功能来实现支持 Web 后端的会话存储,或者可以使用其内置的 PubSub 功能用作中继来实现聊天服务器。
此 Swift 包包含 RESP 协议实现。 一个简单的 Redis 客户端可以在 swift-nio-redis-client 上找到。 我们还提供了一个实际的 Redis 服务器,用 Swift 编写,使用 SwiftNIO 和 SwiftNIO Redis。
此实现的重点是性能。 它尝试尽可能多地重用 NIO ByteBuffer
,以避免复制。
该解析器基于状态机,而不是基于缓冲的 ByteToMessageDecoder
/Encoder。 这虽然不好看,但很有效率 ;-)
一个导入必要模块的 Package.swift
示例
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "RedisTests",
dependencies: [
.package(url: "https://github.com/SwiftNIOExtras/swift-nio-redis.git",
from: "0.9.2")
],
targets: [
.target(name: "MyProtocolTool",
dependencies: [ "NIORedis" ])
]
)
RESP 协议被实现为一个常规的 ChannelHandler
,类似于 NIOHTTP1
。 它接收传入的 ByteBuffer
数据,解析它,并发出 RESPValue
项。 反过来也是一样,用户写入 RESPValue
(或 RESPEncodable
)对象,并且处理程序将它们呈现为 ByteBuffer
。
NIORedis 模块有更多信息。
要将 RESP 处理程序添加到 NIO Channel 管道,需要调用 configureRedisPipeline
方法,例如:
import NIORedis
bootstrap.channelInitializer { channel in
channel.pipeline
.configureRedisPipeline()
.then { ... }
}
协议实现被认为是完整的。 在 telnet
变体中还有一些未完成的工作,但常规的二进制协议被认为是已完成的。