使用带有keeptl选项的spring的redistemplate(带有莴苣库)

hpxqektj  于 2021-07-16  发布在  Java
关注(0)|答案(1)|浏览(501)

我有一根绳子 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);

我觉得我是在做一个多余的不必要的往返redis。这就是问题所在 KEEPTTL 都是关于。防止这种情况。
有什么想法吗?

t9eec4r0

t9eec4r01#

你可以用lua。

RedisScript script = RedisScript.of("return redis.call('SET', KEYS[1], ARGV[1], 'KEEPTTL')");
redisTemplate.execute(script, Collections.singletonList("my_key"), "new_value");

相关问题