2017-03-29 10 views
0

を返し、私は次のことを達成するためのRedisでコマンドを見つけるように見えることはありません。それが存在しない場合は、キーを設定し、そうでない場合は、その値

、そうでない場合は、その値を返します

1つのトランザクションでこれを達成する方法はありますか?

答えて

4

1件の取引ですか?確かに。 1つのコマンド?そう思わないでください。

トランザクション内で、存在しない場合はSETNXを使用してキーを設定し、値を取得します。

MULTI 
SETNX keyName value 
GET keyName 
EXEC 
+0

あなたの答えに感謝。 あなたのアプローチでは、以前に存在しなかったkeyNameのEXPIREをどのように設定できますか? – andrew231

+1

redis 2.6以降を使用している場合、setコマンドでこれを実行できます: 'SET keyName value NX EX timeout_seconds'。 https://redis.io/commands/set – Triptych

2

(免責事項:私は男のLuaのようなものだし、受け入れられた答えは完全に有効である)1つのサーバー側のLuaスクリプト?確かに。 1つのコマンド?そうは思わないでください。)

ここEVALでそれを行うための一つの方法だ:

local v = redis.call('GET', KEYS[1]) 
if v then 
    return v 
end 
return redis.call('SET', KEYS[1], ARGV[1]) 
+0

を参照してください。スピードに関しては、LuaのアプローチがMULTIのアプローチよりも優れていると思いますか? – andrew231

+0

それらはほぼ同じであるべきですが、簡単にベンチマークすることができます。 –

関連する問題