SwiftNIO Redis

Swift5 macOS tuxOS Travis

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。 这虽然不好看,但很有效率 ;-)

使用 Swift Package Manager 导入模块

一个导入必要模块的 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" ])
    ]
)

使用 SwiftNIO Redis 协议处理程序

RESP 协议被实现为一个常规的 ChannelHandler,类似于 NIOHTTP1。 它接收传入的 ByteBuffer 数据,解析它,并发出 RESPValue 项。 反过来也是一样,用户写入 RESPValue(或 RESPEncodable)对象,并且处理程序将它们呈现为 ByteBuffer

NIORedis 模块有更多信息。

要将 RESP 处理程序添加到 NIO Channel 管道,需要调用 configureRedisPipeline 方法,例如:

import NIORedis

bootstrap.channelInitializer { channel in
    channel.pipeline
        .configureRedisPipeline()
        .then { ... }
}

状态

协议实现被认为是完整的。 在 telnet 变体中还有一些未完成的工作,但常规的二进制协议被认为是已完成的。

ZeeZide 提供。 我们喜欢 反馈、GitHub 星星、酷炫的 合同工作,以及你能想到的任何形式的赞美。