一、添加redis依賴庫
mobc_redis
是基於tokio2.0
的異步redis
[dependencies]
mobc-redis = "0.5.0"
mobc = "0.5.7"
tokio = {version = "0.2.13", features = ["full"]}
二、設置redis_url
,創建redis連接池
// use mobc::Pool;
// use mobc_redis::RedisConnectionManager;
// use mobc_redis::{redis, Connection};
let client = redis::Client::open("redis://127.0.0.1:6379").unwrap();
let manager = RedisConnectionManager::new(client);
let pool = Pool::builder().max_open(20).build(manager);
三、執行查詢的幾種函數調用
1、判斷redis服務器是否可用
let mut conn = pool.get().await.unwrap();
let s: String = redis::cmd("PING").query_async(&mut conn as &mut Connection).await.unwrap();
println!("{}", s); // "PONG"
2、簡單命令SET和GET
let mut conn = pool.get().await.unwrap();
let s: String = redis::cmd("SET").arg("a").arg(1).query_async(&mut conn as &mut Connection).await.unwrap();
println!("{}", s); // "OK"
3、執行復雜點的命令,例如管道操作
let mut conn = pool.get().await.unwrap();
let s : (String, u32) = redis::pipe().
cmd("SET").arg("a").arg(1).
cmd("GET").arg("a").
query_async(&mut conn as &mut Connection).await.unwrap();
println!("{:?}", s); // ("OK", 1)
四、redis數據類型的值類型
- enum Value
與rust類型對應關係
enum Value
=>
Nil
=> 返回一個nil值Int(i64)
=> 返回一個整型Data(Vec<u8>)
=> 返回任意二進制數據Bulk(Vec<Value>)
=> 返回一個嵌套的結構Status(String)
=> 返回狀態字符串,比如錯誤信息Okay
=> 返回操作成功 - “OK”
rust 類型
=>
bool
=>false(Nil, Int(0), Status("0"))
、true(Int(!=0), Status("1"), Okay)
,用於判斷是否有值,或操作是否成功String
=>Data(Vec<u8>), Okay, Status(String)
, 操作成功,或者有String值,可以解析出來Vec<T>
=>Data(Vec<u8>), Bulk(Vec<Value>, Nil)
,管道操作,返回多個值的數組形式HashMap<K, V, S>
=>Bulk(Vec<Value>)
BTreeMap<K, V>
=>Bulk(Vec<Value>)
HashSet<T, S>
=>Bulk(Vec<Value>)
BTreeSet<T>
=>Bulk(Vec<Value>)
(T1, T2, T3, ...)
=>Bulk(Vec<Value>)
,多用於管道操作,返回多個值的tuple形式