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

C redis中存储数据的锁定机制,c,redis,locking,C,Redis,Locking,亲爱的,我有一个问题,多个redis客户端正在访问存储在redis服务器中的公共结构 要求如下:- 如果某个特定的redis客户端正在访问存储在redis server中的结构(应在该结构上执行读写操作),则其他redis客户端不应能够访问并等待释放 每次其他redis客户端访问该结构时,他们都应该访问更新后的结构 如何在C代码中设置锁定机制来满足这一要求。 提前感谢。Redis提供以下内容: 1) 使用Redis事务和乐观锁定。看 2) 或者Lua脚本,它将在Redis中以原子方式执行。请参见

亲爱的,我有一个问题,多个redis客户端正在访问存储在redis服务器中的公共结构

要求如下:-

  • 如果某个特定的redis客户端正在访问存储在redis server中的结构(应在该结构上执行读写操作),则其他redis客户端不应能够访问并等待释放
  • 每次其他redis客户端访问该结构时,他们都应该访问更新后的结构
  • 如何在C代码中设置锁定机制来满足这一要求。
    提前感谢。

    Redis提供以下内容:

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


    2) 或者Lua脚本,它将在Redis中以原子方式执行。请参见使用watch命令检测其他客户端的修改。此命令仅指定给redis transactions中的指定键,非常感谢您的回复。了解redis的各种特性和可用的通用方法是很有帮助的

    然而,由于我的要求符合这种方式,我采取了以下方法

    我使用secound时间戳(比如t_sec)作为键,计数器作为散列值。如果在那个特定的第二秒,进一步的请求到来,则对应于t_sec key的计数器值以原子方式递增(HINCRBY命令)。其余参数本地存储在结构中。若计数器达到特定的设置限制,则请求被丢弃。 若这是下一秒,则使用新的t_sec键值,计数器从零递增。
    与前一秒对应的t_sece键被删除(HDEL命令)。

    redis事务(MULTI/EXEC)对您来说还不够吗?@不是高尔夫球手-我对redis的了解有限。我正在散列中存储的结构。下面的顺序在C中是否有效:-MULTI->HGET->对结构执行一些操作,例如更新结构中的一些字段->HSET->exece您无法使用事务观察值。如果这是您需要的,那么Lua脚本可能会更好。它以原子方式运行,直到完成。