栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

StackExchange.Redis

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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命令都是原子的,因此您不必担心两个谨慎的操作会相互竞争。对于更复杂的多操作单元,可以选择 事务脚本



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/365595.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号