2013-03-26 5 views
2

За последние несколько дней обошлось redis. Можно ли выполнить команду соединения вроде следующей:Комбинированные команды команды Redis или командный трубопровод

MGET ZRANGE ranks 0 1 

Я не нашел окончательный ответ от докторов, this old post, или из испытаний:

redis 127.0.0.1:6379> ZRANGE ranks 0 1 
1) "One" 
2) "Two" 
redis 127.0.0.1:6379> MGET One Two 
1) "1" 
2) "2" 
redis 127.0.0.1:6379> MGET ZRANGE ranks 0 1 
1) (nil) 
2) (nil) 
3) (nil) 
4) (nil) 

ответ

4

Redis' встроенных в поддержке сценариев LUA должен позволить вам эффективно объединять команды вместе. См. http://redis.io/commands/eval. Не совсем то, что вы ищете, но, возможно, этого будет достаточно.

Простой пример:

redis> set foo bar 
OK 
redis> set bar baz 
OK 
redis> eval "return  redis.call('get',redis.call('get','foo'))" 0 
"baz" 
+0

Просмотрена ссылка. Кажется перспективным. Однако вы могли бы привести пример, основанный на моих командах redis. –

1

Ваша команда MGET ZRANGE ranks 0 1 работает, потому что он получает значения ключей с именами "ZRANGE", "ranks", "0" и "1". так что вы получаете четыре ответа (nil). В redis нет понятия составной команды. Некоторые клиенты поддерживают конвейерную обработку команд.

0

Вы можете сделать все это в одной команде с помощью команды Redis Lua EVAL так:

EVAL 'local ids = redis.call("ZRANGE", "myset", 0, 100); 
return redis.call("MGET", unpack(ids));' 0 

Лучший способ для производительности использовать ключи и использовать кэшированные сценарий. Полные инструкции здесь: http://redis.io/commands/eval

Смежные вопросы