redis - 有没有办法在redis中以原子方式执行get和set?

标签 redis atomic jedis

我正在使用 jedis,并希望获得一个键的结果并对其进行修改,然后将其存储回去,

String dataToModify = jedis.get(parent_id);
//some modify  eg:  
modifiedData = dataToModify + "modify";
jedis.set(parent_id, modifiedData);

但后来我意识到,如果有人修改了键值parent_id中的数据,那么这个getset之间就会发生冲突。 watch-multi-exec 不起作用,因为我需要在交易期间获取 key parent_id 的值。还有其他方法可以原子地执行此操作吗?谢谢

最佳答案

不确定确切的 jedis 语法,但 Redis 的 WATCH/MULTI/EXEC 会让你这样做(即以原子方式运行获取/设置流程)。或者,如果您在服务器端 Lua 脚本中实现您的工作流程,那也可以保证原子性。

关于redis - 有没有办法在redis中以原子方式执行get和set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24686282/

相关文章:

redis - LPUSH 命令是否适用于从 JSON 初始化的记录?

c# - 使用两个 Redis 实例 - 类似于 Mongos

redis - 获取入队时间超过 5 分钟的 redis-Key 数量

c++ - 为什么 std::atomic_compare_exchange 更新期望值?

java - 使用 Jedis 将 Map<String, String> 转换为值类型

django - 无法在 debug = False(生产)中使用 Django 启动工作进程 Celery 任务

C++11,std::atomic 在 clang 3.2 和 libc++ 中损坏了吗?

c++ - 大量文件的原子删除

redis - Spring Data Redis 和 Jedis 兼容性问题