我正在尝试使用包redis
(版本0.3.1)访问Redis。它会抛出无效的数据库。
extern crate redis;
use redis::*;
use std::string::String;
use std::collections::HashSet;
fn main() {
if let Err(e) = read_meta_keys_redis("myset".to_string()) {
println!("{}", e.description());
}
}
fn read_meta_keys_redis(key: String) -> redis::RedisResult<()> {
println!("22{}", key);
let client = try!(redis::Client::open("redis://127.0.0.1:6379/2"));
let con = try!(client.get_connection());
let mems: HashSet<i32> = try!(con.smembers(key));
for x in mems.iter() {
println!("op-->{}", x);
}
Ok(())
}
我的本地redis
:在shell上发出以下命令
redis-cli
select 2
sadd myset "hello"
sadd myset "how are you"
127.0.0.1:6379[2]> smembers myset
1) "hello" 2) "how are you"
127.0.0.1:6379[2]>
在我之前的问题Silent error while accessing Redis 中可能会找到一些背景信息。
答案 0 :(得分:2)
错误为coming from inside the crate:
path => path.parse::<i64>().unwrap_or(
fail!((ErrorKind::InvalidClientConfig, "Invalid database number"))),
不幸的是,这只是一个编程错误。 unwrap_or
始终评估参数,在本例中为fail!
宏。看起来这应该是unwrap_or_else
,它接受只在失败情况下运行的闭包。
我submitted a PR来解决眼前的问题。作为一种变通方法,您可以直接创建redis::ConnectionInfo
结构并在那里指定数据库。