आप इसे पाइपलाइन के साथ प्राप्त नहीं कर सकते, क्योंकि आप कभी नहीं जानते कि कुंजी तब तक मौजूद है जब तक कि पूरी पाइपलाइन निष्पादित नहीं हो जाती। इसके बजाय, आप काम करने के लिए लुआ स्क्रिप्टिंग का उपयोग कर सकते हैं:
local key = KEYS[1]
local field = ARGV[1]
local value = ARGV[2]
local ttl = ARGV[3]
local exist = redis.call('exists', key)
redis.call('hset', key, field, value)
if exist == 0 then
redis.call('expire', key, ttl)
end
यह देखने के लिए जांचें कि लुआ स्क्रिप्ट को रेडिस-पीई के साथ कैसे चलाया जाए। फिर RTT
. को कम करने के लिए स्क्रिप्ट को पाइपलाइन के साथ चलाएँ ।
अपडेट करें
यदि आप WATCH
. का उपयोग करने पर ज़ोर देते हैं काम करने के लिए, आप निम्न कोड आज़मा सकते हैं:
with r.pipeline() as pipe:
while 1:
try:
pipe.watch(hkey)
exist = pipe.exists(hkey)
pipe.multi()
if not exist:
pipe.hset(hkey, v, v)
pipe.expire(hkey, 3600)
else:
pipe.hset(hkey, v, v)
pipe.execute()
break;
except WatchError:
continue