SwiftNIO Redis 是一个 Swift 包,其中包含一个高性能的 Redis 协议 实现,用于 SwiftNIO。 这是一个独立项目,除了 SwiftNIO 之外没有其他依赖项。
除了可以编码和解码 RESP (REdis 序列化协议) 的协议实现之外,我们还提供了一个基于此构建的 Redis 客户端模块。
什么是 Redis? Redis 是一个高度可扩展的内存数据结构存储,用作数据库、缓存和消息代理。 例如,它可以使用其“过期键”功能来实现支持 Web 后端的会话存储,或者可以用作使用其内置 PubSub 功能来实现聊天服务器的中继。
这个 Swift 包包含一个基于协议实现的简单 Redis 客户端 swift-nio-redis。 我们还提供了一个实际的 Redis 服务器,使用 SwiftNIO 和 SwiftNIO Redis 用 Swift 编写。
一个导入必要模块的 Package.swift
示例
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "RedisTests",
dependencies: [
.package(url: "https://github.com/NozeIO/swift-nio-redis-client.git",
from: "0.10.0")
],
targets: [
.target(name: "MyClientTool",
dependencies: [ "Redis" ])
]
)
Redis 客户端模块模仿 Node.js 的 node_redis 模块,但除了 Node.js 的 (err,result)
风格回调之外,它还支持类似 NIO 的基于 Promise/Future 的方法。 选择你喜欢的。
import Redis
let client = Redis.createClient()
client.set ("counter", 0, expire: 2)
client.incr("counter", by: 10)
client.get ("counter") { err, value in
print("Reply:", value)
}
client.keys("*") { err, reply in
guard let keys = reply else { return print("got no keys!") }
print("all keys in store:", keys.joined(separator: ","))
}
使用 NIO Promises
client
.set ("counter", 0, expire: 2)
.then {
client.incr("counter", by: 10)
}
.then {
client.get("counter")
}
.map {
print("counter is:", $0)
}
协议实现 被认为是完整的。 telnet
变体中还有一些未完成的地方,但常规二进制协议被认为是已完成的。
Redis 客户端模块 还有一些未完成的地方,但似乎工作正常。