LPUSH を使用して複数の値を redis LIST にプッシュしようとしています。コードは次のようになります。
mylist = ["1", "2", "3", "4"]
$redis.lpush(name, mylist)
上記の問題は、リストが「1234」のように平坦化されることです。この場合、LPUSH を使用して 4 つの個別の要素をname
配列にプッシュするにはどうすればよいですか?
あなたは見たいと思うかもしれません:
Redis-rb バージョン 2.2.2 は可変長コマンドをサポートしていません。バージョン 3.0 で導入されましたが、まだ配信されていません。
可変引数コマンドで配列を処理する特定の方法はありません。あなたのコードはおそらくバージョン 3.0 で問題なく動作します。
当面は、次のようなパイプラインを使用することをお勧めします。
name = "toto"
mylist = [ 1,2,3,4,5 ]
$redis.pipelined{ mylist.each{ |x| $redis.lpush(name,x) } }
パイプラインを使用すると、ラウンドトリップの数は、可変引数コマンドを使用する場合と同じになります。
本当に可変引数コマンドを使用したい場合は、次のコマンドを使用して 3.0 のプレリリース バージョンを簡単にインストールできます。
gem install --prerelease redis
gem list redis
*** LOCAL GEMS ***
redis (3.0.0.rc1, 2.2.2)
次を使用して、スクリプトでアクティブ化します。
gem 'redis', '3.0.0.rc1'
require 'redis'
redis gem に依存する他の gem がある場合は、依存関係の問題が発生することに注意してください。正式な配信 IMO を待つ方がよいでしょう。
あなたができること:
# If you want ["1","2","3","4",...restofarray...]
mylist.reverse.each{ |v| $redis.lpush(name,v) }
# If you want ["4","3","2","1",...restofarray...]
mylist.each{ |v| $redis.lpush(name,v) }
v 3.0 + の構文は次のとおりです。
r= Redis.new()
r.lpush("mylist", ["element1", "element2" , "element3"])