是否可以检查Redis设置密钥是否存在以及是否存在设置密钥,如果确实存在则退出,全部作为事务

时间:2015-07-20 23:22:10

标签: php redis

我想将此作为一项交易,因为此密钥将用作"锁定"以后的行动。如果发生这种情况该怎么办:

  1. 检查是否存在
  2. 确定它不存在
  3. 其他人检查它是否存在,而我确定它不存在
  4. 设置它,因为它不存在,然后执行我的操作
  5. 第二个人同时设置它并在不允许的情况下采取行动。

2 个答案:

答案 0 :(得分:2)

好吧,如果您想了解redis交易的性质: http://redis.io/topics/transactions

特别是这部分:

  

“事务中的所有命令都被序列化并执行   顺序。它永远不会发生另一个人发出的请求   客户端在Redis执行过程中提供服务   交易。这可以保证命令作为a执行   单一孤立的操作。“

如果您想要一个仅在不存在的情况下添加的命令,http://redis.io/commands/setnx是指向SETNX的文档的链接。

对于事务,您首先调用MULTI,然后发送您想要的任何命令,然后调用EXEC开始执行一系列命令。这保证是原子的,在序列完成之前不能执行其他命令。

HTH

答案 1 :(得分:2)

使用SET命令的NX标志。

正如文档建议的那样:

  

命令SET resource-name anystring NX EX max-lock-time是使用Redis实现锁定系统的简单方法。