Rust庫 simple-redis使用

  • 2019 年 10 月 6 日
  • 筆記

今天分享一個Rust的第三方庫 simple_redis 的使用。

這個庫正向它的名字一樣,簡單易用,是基於redis-rs庫封裝的,不過目前使用下來僅支援單個的redis連接,稍微有點遺憾,不過這個庫本身還是較好用的。

安裝:

[dependencies]  simple_redis = "0.3.44"
cargo build

使用:

連接資料庫:

fn test() -> Result<(), simple_redis::RedisError> {      let mut clients = simple_redis::create("redis://127.0.0.1:6379/0")?;  }

create方法參數的書寫通式: redis://[:<passwd>@]<hostname>[:port][/<db>]

create返回值是Result<simple_redis::client::Client,simple_redis::RedisError>

match simple_redis::create("redis://127.0.0.1:6379/") {      Ok(clients) => clients,      Err(error) => println!("error:{}", error)  }

注意:通過 ? 運算符同樣可以取到Result和Option的值,值為Err或者None的情況會直接返回這些值。所以要求使用此運算符所在的函數返回值要與調用方法返回類型一致才可以調用。

認證密碼:

clients.auth("*******");

設置redis string類型:

clients.set("rust_key", "sdkdd");  clients.set("rust_key_num", 233_i32);

獲取redis string:

let str_val = clients.get::<String>("rust_key")?;  let num_val = clients.get::<i32>("rust_key_num")?;

設置list:

clients.lpush("rust_list", "sdkdd");  clients.rpush("rust_list", "sdkdd");  clients.lpushx("rust_list", "sdkdd");  clients.rpushx("rust_list", "sdkdd");

redis list pop:

let val = clients.lpop::<String>("rust_list")?;  let val2 = clients.rpop::<String>("rust_list")?;

獲取list range:

let list:Vec<String> = clients.lrange("rust_list", 0, -1)?;

設置Hash:

clients.hset("rust_hash", "a", 1);  clients.hsetnx("rust_hash", "b", 1);

讀取hash:

clients.hget::<i32>("rust_hash", "a");  // 1   i32類型  clients.hget_string("rust_hash", "a");  // "1"   String類型  clients.hgetall("rust_hash");  // HashMap<String,String>類型

無序集合處理:

clients.sadd("rust_set", "b");  clients.sadd("rust_set", "a");  clients.smembers("rust_set")?;  // Vec<String>類型  clients.sismember("rust_set", "c")?; // 判斷元素存在 bool類型 

以上僅列舉了一部分的支援的方法,目前有序集合、集群命令等沒有直接支援。

需要使用的話則可以使用如下方法:

clients.run_command("zadd", vec!["rust_zem", "1",  "me3"])?;  clients.run_command::<HashMap<String, String>>("zrange", vec!["rust_zem", "0", "-1", "WITHSCORES"])?;  clients.run_command::<Vec<String>>("zrange", vec!["rust_zem", "0", "-1", "WITHSCORES"])?;

run_command函數還有幾個固定返回類型的函數:

run_command_bool_response(self:&mut Client, command:&str, arg:Vec<String>)  run_command_string_response(self:&mut Client, command:&str, arg:Vec<String>)  run_command_empty_response(self:&mut Client, command:&str, arg:Vec<String>)  run_command_from_string_response(self:&mut Client, command:&str, arg:Vec<String>)

上面的方法自由度較高,可以調用很多命令。

其他:

也可以直接使用redis-rs,不過使用的相對繁瑣一些,需要自行封裝。

安裝:

[dependencies]  redis = "0.12.0"

簡單使用:

let client = redis::Client::open("redis://127.0.0.1/")?;  let mut con = client.get_connection()?;  redis::cmd("SET").arg("rust_key").arg(42).execute(&mut con)?;  let val:i32 = redis::cmd("GET").arg("rust_key").arg(42).query::<i32>(&mut con)?;