有没有办法在redis中执行get和原子设置?

时间:2014-07-10 21:06:46

标签: 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不起作用,因为我需要在事务期间获取键parent_id的值。还有其他方法可以原子地做到这一点吗?谢谢

2 个答案:

答案 0 :(得分:0)

对于确切的jedis语法不确定,但Redis' WATCH / MULTI / EXEC将允许您这样做(即,以原子方式运行get / set流)。或者,如果您在服务器端Lua脚本中实现工作流,那么这也将保证原子性。

答案 1 :(得分:0)

如何将日期保存在纪元(也称为unix time)值中,这样您就可以将日期视为数字并使用INCRBY命令,例如:
jedis.incrby(parent_id, modify);