#helper #top #built #set #redis-rs #json #cohesive

redis_utils

基于redis-rs构建的协同助手

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数据库接口

Unlicense

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::DbErrorTxError::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