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



我是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不需要每个操作的密钥,因为它在内部保留密钥并委托给ValueOperations应用非常值。

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

当涉及到特定命令时,请查看 SET 的 Redis 文档,其中包含不同的选项,如NX(仅在密钥不存在时才设置密钥(和 SETEX。

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

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

如果其中一个操作发送了错误的命令时出现问题,请在错误跟踪器中提交票证。

最新更新