使用 Spring 的 RedisTemplate 和 KEEPTTL 选项(使用 Lettuce 库)

Using Spring's RedisTemplate with KEEPTTL option (with Lettuce library)

我有一个字符串 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 的意义所在。防止这种情况。

有什么想法吗?

您可以使用 LUA.

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

我用的是Redisson。它与 Spring Data Redis 完美集成。 它具有用于设置值和 ttl 的内置选项。

https://github.com/redisson/redisson