存储在redis中的数据的锁定机制

时间:2017-03-13 12:00:50

标签: c redis locking

亲爱的,我有一个问题,即多个redis-clients正在访问存储在redis-server中的公共结构。

要求如下: -

  1. 如果某个特定的redis-client正在访问存储在redis-server中的结构(应该对该结构进行读写操作),那么其他redis-client就无法访问并等待被释放。
  2. 每当其他redis-client访问该结构时,他们都应该访问更新的结构。
  3. 如何在C代码中使用锁定机制来满足此要求。 在此先感谢。

3 个答案:

答案 0 :(得分:1)

Redis提供以下内容:

1)使用Redis事务和乐观锁定。见Redis Transactions

2)或Lua脚本,将以原子方式在Redis中执行。见EVAL

答案 1 :(得分:0)

使用watch命令https://redis.io/commands/watch检测其他客户端的修改。此命令仅指定给redis事务中的指定键

答案 2 :(得分:0)

亲爱的,谢谢大家的回复。了解redis提供的各种功能和通用方法很有帮助。

然而,由于我的要求符合这一要求,我接近如下。

我使用secound时间戳(比方说t_sec)作为键和计数器作为哈希值。如果在该特定秒中,进一步的请求到来,则对应于t_sec密钥的计数器值以原子方式递增(HINCRBY命令)。其余参数本地存储在结构中。如果计数器达到特定的设置限制,则请求被删除。 如果这是下一秒,则使用新的t_sec密钥值,并且计数器从零开始递增。 与前一秒相对应的t_sec密钥被删除(HDEL命令)。