3

redis でこれを行う方法はありますか?

SET counter 0
INCR counter
SET KEY:{counter} "Content of line 1"
INCR counter
SET KEY:{counter} "Different content of line 2"

私のコード例は、次のように置き換える必要があります (つまり、実行時に redis-cli によって変換されます)。

SET counter 0
INCR counter
SET KEY:1 "Content of line 1"
INCR counter
SET KEY:2 "Different content of line 2"
etc.

私の問題は、カウンターを自動インクリメントする方法ではありません。
私の問題は構文です:ジェネリック {wildcard} を次のようなものに含める方法:

SET keyname:{currentcounter} "value" ...

どんな助けでも大歓迎です。どうもありがとう !

バーニー

4

2 に答える 2

1

redis 2.6+ を使用している場合は、次のように EVAL コマンドとともに lua スクリプトを使用できます。

eval "local c = redis.call('incr', KEYS[1]); 
      return redis.call('set', KEYS[2] .. ':' .. c, ARGV[1])"
      2 counter KEY "Content of line 1"

読みやすくするために複数行に分けました。

編集
申し訳ありませんが、私は数日間仕事をしていませんでした。これが機能することを示すサンプルです。

redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379> eval "local c = redis.call('incr', KEYS[1]); return redis.call('set', KEYS[2] .. ':' .. c, ARGV[1])" 2 counter KEY "Content of line 1"
OK
redis 127.0.0.1:6379> keys *
1) "KEY:1"
2) "counter"
redis 127.0.0.1:6379> get counter
"1"
redis 127.0.0.1:6379> get KEY:1
"Content of line 1"
redis 127.0.0.1:6379> eval "local c = redis.call('incr', KEYS[1]); return redis.call('set', KEYS[2] .. ':' .. c, ARGV[1])" 2 counter KEY "Content of the next thing"
OK
redis 127.0.0.1:6379> keys *
1) "KEY:1"
2) "KEY:2"
3) "counter"
redis 127.0.0.1:6379> get counter
"2"
redis 127.0.0.1:6379> get KEY:2
"Content of the next thing"
于 2013-08-23T23:00:23.777 に答える
0

いいえ、SET/GET コマンドはこれをサポートしていません。

redis で LUA スクリプトを使用して同様のことを行うことができます。簡単なプログラミング/スクリプトを使用して、redisが期待するようにコマンドを発行できます

于 2013-08-23T22:47:12.187 に答える