前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rust库 simple-redis使用

Rust库 simple-redis使用

作者头像
江湖安得便相忘
发布2019-09-24 16:16:37
2K0
发布2019-09-24 16:16:37
举报
文章被收录于专栏:江湖安得便相忘

今天分享一个Rust的第三方库 simple_redis 的使用。

这个库正向它的名字一样,简单易用,是基于redis-rs库封装的,不过目前使用下来仅支持单个的redis连接,稍微有点遗憾,不过这个库本身还是较好用的。

安装:

代码语言:javascript
复制
[dependencies]
simple_redis = "0.3.44"
代码语言:javascript
复制
cargo build

使用:

连接数据库:

代码语言:javascript
复制
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>

代码语言:javascript
复制
match simple_redis::create("redis://127.0.0.1:6379/") {
    Ok(clients) => clients,
    Err(error) => println!("error:{}", error)
}

注意:通过 ? 运算符同样可以取到Result和Option的值,值为Err或者None的情况会直接返回这些值。所以要求使用此运算符所在的函数返回值要与调用方法返回类型一致才可以调用。

认证密码:

代码语言:javascript
复制
clients.auth("*******");

设置redis string类型:

代码语言:javascript
复制
clients.set("rust_key", "sdkdd");
clients.set("rust_key_num", 233_i32);

获取redis string:

代码语言:javascript
复制
let str_val = clients.get::<String>("rust_key")?;
let num_val = clients.get::<i32>("rust_key_num")?;

设置list:

代码语言:javascript
复制
clients.lpush("rust_list", "sdkdd");
clients.rpush("rust_list", "sdkdd");
clients.lpushx("rust_list", "sdkdd");
clients.rpushx("rust_list", "sdkdd");

redis list pop:

代码语言:javascript
复制
let val = clients.lpop::<String>("rust_list")?;
let val2 = clients.rpop::<String>("rust_list")?;

获取list range:

代码语言:javascript
复制
let list:Vec<String> = clients.lrange("rust_list", 0, -1)?;

设置Hash:

代码语言:javascript
复制
clients.hset("rust_hash", "a", 1);
clients.hsetnx("rust_hash", "b", 1);

读取hash:

代码语言:javascript
复制
clients.hget::<i32>("rust_hash", "a");  // 1   i32类型
clients.hget_string("rust_hash", "a");  // "1"   String类型
clients.hgetall("rust_hash");  // HashMap<String,String>类型

无序集合处理:

代码语言:javascript
复制
clients.sadd("rust_set", "b");
clients.sadd("rust_set", "a");
clients.smembers("rust_set")?;  // Vec<String>类型
clients.sismember("rust_set", "c")?; // 判断元素存在 bool类型 

以上仅列举了一部分的支持的方法,目前有序集合、集群命令等没有直接支持。

需要使用的话则可以使用如下方法:

代码语言:javascript
复制
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函数还有几个固定返回类型的函数:

代码语言:javascript
复制
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,不过使用的相对繁琐一些,需要自行封装。

安装:

代码语言:javascript
复制
[dependencies]
redis = "0.12.0"

简单使用:

代码语言:javascript
复制
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)?;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 可回收BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档