Redbird 0.3.0

Redbird 0.3.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布上次发布2016年2月
SPM支持 SPM

Honza Dvorsky 维护。



Redbird 0.3.0

Redbird

Redis + Swift. Red 是 Swift。Swift 是一只鸟。Redbird。

尝试从原始协议规范实现 Redis 客户端的纯 Swift 实现。

Redis 通信协议规范: https://redis.ac.cn/topics/protocol

:question: 为什么?

当我为我的应用编写服务器时,我通常使用 1) Linux 服务器,2) Redis 作为我的数据库/缓存。现在我也要用 Swift 编写一切。我查阅了现有的 Swift Redis 封装器,不幸的是,它们都只是封装了一个需要外部安装的 C 库(真讨厌)。因此,我决定把它们都扔掉,回到 Redis 协议规范,并构建一个没有依赖的 Swift 客户端,这样它就可以通过添加 Swift 包管理器条目在 OS X 和 Linux 上使用,而无需安装任何其他东西。

这意味着我从裸 TCP 套接字开始编写。仅使用 GlibcDarwin 头文件,以及标准 Swift 库。无依赖项。

安装

Swift 包管理器

.Package(url: "https://github.com/czechboy0/Redbird.git", majorVersion: 0)

用法

创建一个 Redbird 实例,该实例打开到指定 Redis 服务器的套接字。然后在该实例上调用所需的命令,它会同步返回响应。该响应可以是以下支持类型中的任何一种: SimpleStringBulkStringIntegerErrorRespArrayNullBulkStringNullArray,它们都继承自协议 RespObject,该协议有一个 RespType,用于通信你要获取的类型。

do {
    let client = try Redbird(address: "127.0.0.1", port: 6379)
    try client.auth(password: "mypass1") // call .auth once after creation if your Redis requires a password
    let response = try client.command("SET", params: ["mykey", "hello_redis"]).toString() //"OK"
} catch {
    print("Redis error: \(error)")
}

简化转换

直接处理 RespObject 类型时,您还可以使用以下便利转换器,它们将尝试将您的 RespObject 转换为指定的类型

  • .toString() -> String
  • .toMaybeString() -> String?
  • .toArray() -> [RespObject]
  • `.toMaybeArray()` -> [RespObject]?

  • `.toInt()` -> Int

  • `.toBool()` -> Bool

  • `.toError()` -> ErrorType

管道

支持命令 pipelining。只需请求一个 Pipeline 对象,在该对象上 enqueue 命令,然后调用 execute() 将命令发送到服务器。您将收到一个响应对象数组,这些对象按您的命令入队顺序排列。

let responses = try client.pipeline()
    .enqueue("PING")
    .enqueue("SET", params: ["test", "Me_llamo_test"])
    .enqueue("GET", params: ["test"])
    .enqueue("PING")
    .execute()
// responses: [RespObject]

上述转换器在用于不兼容的类型(例如在 Integer 上调用 toArray())时会抛出错误。

缺少的功能?

目前 Redbird 的设计理念是提供一个无依赖、最少功能的 Swift Redis 客户端。例如,易于使用的标准命令的包装器(如 transactions)的功能目前不在路线图上(除了 AUTH,这是非常常见的,所以做出了简化)。我想确保 Redbird 可以 允许 您使用 所有 Redis 的功能。然而,目标不是让它变得 简单,而是让它变得 简单

话虽如此,如果 Redbird 不支持 您想使用的某项基本功能,请创建一个问题,我将尽力添加它。感谢您的帮助!🎉

:gift_heart: 贡献

请创建一个描述您问题的 issue,或者提交一个修正的 pull request。

:v: 授权

MIT

:alien: 作者

Honza Dvorsky - http://honzadvorsky.com, @czechboy0