#redis #async

darkredis

使用 std::future 的异步 Redis 客户端

17个版本

0.8.0 2021年2月13日
0.7.0 2020年3月7日
0.6.1 2020年1月9日
0.5.2 2019年12月14日
0.2.0 2019年7月31日

#544数据库接口

每月 33 次下载
用于 5 Crates(直接使用2个)

Zlib 许可证

110KB
2.5K SLoC

darkredis : 基于 std::futureasync_await 的 Redis 客户端

Documentation Build Status Crates.io Status

darkredis 是使用新的 std::futureasync_await 编写的 Rust Redis 客户端。它设计得易于使用,缺乏高级功能。需要 rust 1.39.0 或更高版本。

目前并非所有 Redis 命令都有便利函数,可能需要进行一些用户体验改进。

注意

从版本 0.8.0 开始,darkredis 已不再维护。

为什么?

darkredis 最初编写时,它是异步项目的一部分。当时,没有真正的方法可以在 redis-rs 中使用 .await,所以我决定改变这一点。结果是 darkredis,它在我的个人使用中表现得非常好,也可能适合你。它设计得尽可能简单,作为调用 Redis 命令的简单方式。

Cargo 功能

  • runtime_tokio(默认启用):使用 tokio 0.2 运行时和 Tcp 原语。需要运行 tokio 0.2 运行时。
  • runtime_async_std:使用 async-std 而不是 tokio,使用其运行时而不是 tokio。与 runtime_tokio 功能互斥。

入门

  • darkredis 添加到您的 Cargo.toml 文件中。
  • 以某种方式创建异步上下文,例如使用 tokio 0.2。
  • 创建一个 ConnectionPool 并获取连接!
use darkredis::ConnectionPool;

#[tokio::main]
async fn main() -> darkredis::Result<()> {
    let pool = ConnectionPool::create("127.0.0.1:6379".into(), None, num_cpus::get()).await?;
    let mut conn = pool.get().await;

    //And away!
    conn.set("secret_entrance", b"behind the bookshelf").await?;
    let secret_entrance = conn.get("secret_entrance").await?;
    assert_eq!(secret_entrance, Some("behind the bookshelf".into()));

    //Keep our secrets
    conn.del("secret_entrance").await?;

    Ok(())
}

变更日志

0.8.0

重大更改

  • 更新 tokio 到 1.0
  • 更新依赖项
  • 从 futures mutex 移至 async-std/tokio mutex。

注意

这可能是最后一个版本。不要期望有任何更新。

0.7.0

重大更改

  • 将 blpop 和 brpop 命令更改为返回一个元组而不是不必要的向量。
  • 添加了新的错误变体:EmptySlice
  • delsadd 现在返回 bool

更改

  • 正确解析嵌套数组。
  • 便利函数现在在给定的切片为空时返回错误。

添加

  • 添加对 SCAN、SSCAN 和 HSCAN 的支持。
  • 为 TYPE 命令提供便捷函数。
  • 为所有 SET 命令添加便捷函数。

0.6.0

重大更改

  • run_commands 改为返回流。
  • runtime_agnostic 功能重命名为 runtime_async_std
  • Connection::connect 分割为认证和不认证的版本。
  • 连接密码现在接受 AsRef<[u8]> 而不是强制使用字符串。
  • 删除已弃用函数 set_with_expiry
  • MSET 改为使用新的 MSetBuilder 结构体

添加

  • 哈希表便捷函数
  • 为集合添加一些便捷函数
  • 允许使用预先分配的序列化缓冲区运行命令
  • 大多数类型现在实现了 Debug

0.5.2

  • 提高序列化性能 50%! 🎉
  • 添加基准测试

0.5.1

  • 添加 blpop 和 brpop

0.5.0

  • 更新到 tokio 0.2.3 和 async-std 1.2.0
  • 添加过期命令
  • 连接:弃用 set_with_expiry,使用 set_and_expire_secondsset_and_expire_ms 代替。

0.4.1

  • 更新到 async-std 1.0.1 和 futures 0.3.1

0.4.0

  • (破坏性更改) 添加 runtime_agnosticruntime_tokio 功能。
  • 使用 MessageStreamPMessageStream 类型提供简单的 Pubsub 支持。
  • 能够使用连接池的设置启动一个新的连接
  • 在测试模式下使用 tokio
  • PUBLISH 添加便捷函数
  • 添加 Pubsub 示例
  • CommandCommandList 添加构建器函数的变体,这些函数修改对象而不是移动它。

0.3.1

  • 显式使用来自 async-std 的特质,而不是 std。这解决了在 async-std 0.99.5 上的编译问题

0.3.0

  • INCRDECR 命令系列、APPENDMGETMSETEXISTS 添加便捷函数。
  • 改进便捷函数的文档
  • 允许在连接池中重命名客户端连接

0.2.3

  • 对于 TcpStream,使用 async-std 而不是 runtime,允许使用 darkredis 与任何运行时一起使用。

0.2.2

  • 更新依赖项

0.2.1

  • 修复最新夜间版本上的编译错误

0.2.0

  • 命令和命令列表不再执行任何复制操作
  • 为命令和命令列表添加了 args 方法
  • lpushrpush 现在接受多个参数
  • 支持密码认证
  • lrange 不再返回 Option,而是返回空 vec。
  • 为以下命令添加便捷函数:lsetltrim

0.1.3

  • 从 lpop 和 rpop 方法中删除不必要的泛型参数。

0.1.2

  • 修复一些文档错误

0.1.1

  • 初始发布

测试

如果你正在修改 darkredis 并想运行测试,请确保你的本地机器上运行着 Redis 实例,端口为 6379。测试会清理任何自行设置的键,除非测试失败。如果发生这种情况,请提交一个问题。

此外,请确保使用 runtime_tokioruntime_async_std 功能运行测试,以确保其正常工作。

依赖关系

~0.7–14MB
~142K SLoC