Spring "Redis String Template" 附加值而不是替换

Spring "Redis String Template" Appends Values instead of Replacing

我是 Redis+ 新手Spring。

有什么区别
stringRedisTemplate.boundValueOps(key).setIfAbsent("STARTED", timeout)
stringRedisTemplate.boundValueOps(key).set("STOPPED", timeout);

stringRedisTemplate.opsForValue().setIfAbsent(key, "STARTED", timeout)
stringRedisTemplate.opsForValue().set(key, "STOPPED", timeout);

我的问题是前者附加新值而后者替换它。我在这里错过了什么?
创建(原子地)一个简单的字符串值并不断更新它的正确方法是什么?谢谢。

BoundValueOperationsValueOperations 之间没有真正的区别,除了 BoundValueOperations 不需要每个操作的 key它在内部保留 key 并委托 ValueOperations 应用这个值。

BoundValueOperations<String, String> keyBoundOps = stringRedisTemplate.boundValueOps(key);
keyBoundOps.setIfAbsent("STARTED", timeout);
keyBoundOps.set("STOPPED", timeout);

当涉及到具体命令时,请查看 SET with different Options like NX (Only set the key if it does not already exist) and SETEX 的 Redis 文档。

setIfAbsent("STARTED", timeout) -> SET key STARTED EX timeout NX.
set("STOPPED", timeout) -> SETEX key timeout STOPPED.

您可以使用 MONITOR 查看所有到达服务器的命令。

如果其中一个操作发送错误命令有问题,请在错误中提交工单tracker