我正在尝试使用 crate 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 中可以找到一些背景。

最佳答案

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

关于redis - 使用 redis crate : Invalid database number 访问不同的 Redis 数据库时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31100346/

10-11 23:08
查看更多