2016-06-23 2 views
2

내가 함께 녹를 사용하여 액세스 레디 스에 노력하고있어 다음수가 잘못 레디 스-RS과 MGET 사용

extern crate redis; 

use redis::{Client, Commands, Connection, RedisResult}; 

fn main() { 

    let redis_client = Client::open("redis://127.0.0.1/").unwrap(); 
    let redis_conn = redis_client.get_connection().unwrap(); 

    let mut keys_to_get = vec![]; 
    keys_to_get.push("random_key_1".to_string()); 
    keys_to_get.push("random_key_2".to_string()); 
    let redis_result: String = redis_conn.get(keys_to_get).unwrap(); 
} 

내가 cargo run를 실행할 때 내가 얻을 :

 Running `target/debug/test_resdis` 
thread '<main>' panicked at 'called `Result::unwrap()` on an `Err` value: An error was signalled by the server: wrong number of arguments for 'get' command', ../src/libcore/result.rs:746 
note: Run with `RUST_BACKTRACE=1` for a backtrace. 
error: Process didn't exit successfully: `target/debug/test_resdis` (exit code: 101) 

암의 I를 잘못한 일을하거나 버그일까요? netcat을 서버에 대해 프로그램을 실행

답변

1

다음과 같은 요청이 만들어 보여줍니다

*3 
$3 
GET 
$12 
random_key_1 
$12 
random_key_2 

GET 명령이 MGET해야한다.


나는 이것이 bug in the implementation 생각하는 : 후드에서

impl<T: ToRedisArgs> ToRedisArgs for Vec<T> { 
    fn to_redis_args(&self) -> Vec<Vec<u8>> { 
     ToRedisArgs::make_arg_vec(self) 
    } 
} 

impl<'a, T: ToRedisArgs> ToRedisArgs for &'a [T] { 
    fn to_redis_args(&self) -> Vec<Vec<u8>> { 
     ToRedisArgs::make_arg_vec(*self) 
    } 

    fn is_single_arg(&self) -> bool { 
     ToRedisArgs::is_single_vec_arg(*self) 
    } 
} 

, 라이브러리는 true의 기본 구현이 ToRedisArgs::is_single_arg를 사용하여, 그것은 다중 또는 아니에요 알고 키 유형을 검사 .

슬라이스는 ToRedisArgs::is_single_arg을 구현하지만 Vec은 구현하지 않습니다. 이 또한 해결 방법을 제안한다 : 조각 같은 벡터를 치료 :

redis_conn.get(&*keys_to_get) 

This issue has now been filed with the library합니다.

+0

여기 있습니다 : https://github.com/mitsuhiko/redis-rs/issues/95 도움을 주셔서 감사합니다. – cmedeiros

+0

mitsuhiko (redis-rs 제작자)가 이미 그것을 고쳤으며 다음 릴리스에 있어야합니다. – cmedeiros