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);
我的问题是前者附加新值而后者替换它。我在这里错过了什么?
创建(原子地)一个简单的字符串值并不断更新它的正确方法是什么?谢谢。
BoundValueOperations
和 ValueOperations
之间没有真正的区别,除了 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。
我是 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);
我的问题是前者附加新值而后者替换它。我在这里错过了什么?
创建(原子地)一个简单的字符串值并不断更新它的正确方法是什么?谢谢。
BoundValueOperations
和 ValueOperations
之间没有真正的区别,除了 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。