मेरे पास एक स्ट्रिंग है RedisTemplate REDIS को एक्सेस करने के लिए। नीचे एक कनेक्शन है जो मुझे LettuceConnectionFactory के माध्यम से मिलता है।

मैं RedisTemplate उदाहरण के साथ इन REDIS कमांड के बराबर पूरा करना चाहता हूं।

set my_key new_value keepttl

मेरे पास अब यह है:

RedisTemplate<String, String> redisTemplate = getMyRedisTemplate();
final ValueOperations<String, String> ops = redisTemplate.opsForValue();
ops.set("my_key", "new_value");

लेकिन अगर मैं ऐसा करता हूं, तो मैं पहले से सेट ttl को खो देता हूं।

दूसरी ओर, अगर मैं ऐसा करता हूं:

RedisTemplate<String, String> redisTemplate = getMyRedisTemplate();
final ValueOperations<String, String> ops = redisTemplate.opsForValue();
Long expire = redisTemplate.getExpire("my_key");
ops.set("my_key", "new_value", expire);

मुझे लगता है कि मैं रेडिस के लिए एक अतिरिक्त अनावश्यक राउंडट्रिप कर रहा हूं। यही KEEPTTL के बारे में है। इस पर रोक लगा रहे हैं।

कोई विचार?

1
Pablo Santa Cruz 17 मार्च 2021, 18:14

2 जवाब

सबसे बढ़िया उत्तर

आप एलयूए का उपयोग कर सकते हैं।

RedisScript script = RedisScript.of("return redis.call('SET', KEYS[1], ARGV[1], 'KEEPTTL')");
redisTemplate.execute(script, Collections.singletonList("my_key"), "new_value");
3
sazzad 18 मार्च 2021, 08:13
धन्यवाद! मैं कुछ आसान की उम्मीद कर रहा था। :(लेकिन वैसे भी जानकारी के लिए बहुत बहुत धन्यवाद!
 – 
Pablo Santa Cruz
18 मार्च 2021, 15:04

मैं रेडिसन का उपयोग करता हूं। यह स्प्रिंग डेटा रेडिस के साथ अच्छी तरह से एकीकृत है। इसमें ttl के साथ वैल्यू सेट करने का बिल्ट-इन विकल्प है।

https://github.com/redisson/redisson

1
RamPrakash 30 जून 2021, 22:24