使用redis crate访问其他Redis数据库时出错:无效的数据库编号

时间:2015-06-28 13:26:24

标签: redis rust

我正在尝试使用包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 中可能会找到一些背景信息。

1 个答案:

答案 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结构并在那里指定数据库。