Rust - redis 簡單操作

一、添加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形式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章