4个版本
0.1.3 | 2022年2月17日 |
---|---|
0.1.2 | 2022年1月20日 |
0.1.1 | 2022年1月18日 |
0.1.0 | 2022年1月18日 |
#1431 在 数据库接口
16KB
215 行
redis_utils
在redis-rs之上构建的协同助手,用于
- 异步事务
- 获取和设置JSON值
异步事务
一个宏,帮助你设置安全的异步redis事务。
接受
- 一个连接
- 一个pipeline的名称,它将在原子模式中配置。
- 要监控的一组键
- 事务的主体可以获取这些键,使用pipeline(用于副作用),如果这些键发生变化(并且原子pipeline的
EXEC
部分失败),则主体将被重新执行。 - 允许安全地提前返回(中止事务),并带有类型值,所有键将在提前返回期间取消监控。
tx!(&mut con, pipe, &["key1"], {
let mut value: u8 = con.get("key1").await?;
value = value + 1;
Ok(pipe.set("key1", value))
});
中止事务
tx!(&mut con, pipe, &["key1"], {
let mut value: u8 = con.get("key1").await?;
value = value + 1;
if value == 69 {
return Err(Abort(BadNumberFound));
}
Ok(pipe.set("key1", value))
});
处理返回值
let tx: Result<u8, TxError<NumberError> > = tx!(&mut con, pipe, &["key1"], {
let mut value: u8 = con.get("key1").await?;
value = value + 1;
if value == 69 {
return Err(Abort(BadNumberFound));
}
Ok(pipe.set("key1", value))
});
Ok(T)
的tx
是传递给pipe.set()
的类型,用于redis-rs
的类型推理。TxError
允许你在TxError::Abort
中返回任何类型,以进行自定义类型处理。- 如果事务由于底层
redis
错误或serde
tx
,将反映在相关的TxError::DbError
或TxError::Serialization
中。
JSON助手
使用TODO中的助手,你可以将这个
let json_string: String = con.get(key).await?;
let value: Type = serde_json::from_str(&json_string).unwrap;
let value: Type = con.json_get(key).await.unwrap();
依赖关系
~5–18MB
~221K SLoC