StackExchange.Redis

StackExchange.Redis,第1张

StackExchange.Redis

锁由三部分组成:

  • 密钥(数据库中锁的唯一名称)
  • 值(一个调用方定义的令牌,该令牌可用于指示谁“拥有”该锁,并检查是否正确完成了释放和扩展该锁)
  • 持续时间(故意锁是有限持续时间的东西)

如果没有其他价值,guid可能会做出合适的“价值”。我们倾向于使用机器名(如果多个进程可能在同一台机器上竞争,则使用机器名的简化版本)。

另外,请注意,锁定只是一种 推测 ,而不是 阻塞 。您很可能 无法 获取锁,因此您可能需要对此进行测试并可能添加一些重试逻辑。

一个典型的例子可能是:

RedisValue token = Environment.MachineName;if(db.LockTake(key, token, duration)) {    try {        // you have the lock do work    } finally {        db.LockRelease(key, token);    }}

请注意,如果工作很长(尤其是循环),则可能需要

LockExtend
在中间添加一些偶尔的调用-再次记住要检查是否成功(以防超时)。

还要注意, 所有 单独的redis命令都是原子的,因此您不必担心两个谨慎的 *** 作会相互竞争。对于更复杂的多 *** 作单元,可以选择 事务脚本



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4886540.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-12
下一篇2022-11-11

发表评论

登录后才能评论

评论列表(0条)

    保存