2016-06-23 3 views
2

私は錆を使用してアクセスRedisのにしようとしている以下:間違った数のRedis-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

関連する問題