を返し、私は次のことを達成するためのRedisでコマンドを見つけるように見えることはありません。それが存在しない場合は、キーを設定し、そうでない場合は、その値
、そうでない場合は、その値を返します
1つのトランザクションでこれを達成する方法はありますか?
を返し、私は次のことを達成するためのRedisでコマンドを見つけるように見えることはありません。それが存在しない場合は、キーを設定し、そうでない場合は、その値
、そうでない場合は、その値を返します
1つのトランザクションでこれを達成する方法はありますか?
1件の取引ですか?確かに。 1つのコマンド?そう思わないでください。
トランザクション内で、存在しない場合はSETNXを使用してキーを設定し、値を取得します。
MULTI
SETNX keyName value
GET keyName
EXEC
(免責事項:私は男の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])
を参照してください。スピードに関しては、LuaのアプローチがMULTIのアプローチよりも優れていると思いますか? – andrew231
それらはほぼ同じであるべきですが、簡単にベンチマークすることができます。 –
あなたの答えに感謝。 あなたのアプローチでは、以前に存在しなかったkeyNameのEXPIREをどのように設定できますか? – andrew231
redis 2.6以降を使用している場合、setコマンドでこれを実行できます: 'SET keyName value NX EX timeout_seconds'。 https://redis.io/commands/set – Triptych