当前位置: 首页 > news >正文

手表网站海马300米潜水表分析苏宁易购网站内容建设

手表网站海马300米潜水表,分析苏宁易购网站内容建设,谷歌paypal下载,互联网营销 网站 推荐Redisson主要解决一下问题 重入问题#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中#xff0c;可重入锁的意义在于防止死锁#xff0c;比如HashTable这样的代码中#xff0c;他的方法都是使用synchronized修饰的#xff0c;假如他在一个方法内重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中可重入锁的意义在于防止死锁比如HashTable这样的代码中他的方法都是使用synchronized修饰的假如他在一个方法内调用另一个方法那么此时如果是不可重入的不就死锁了吗所以可重入锁他的主要意义是防止死锁我们的synchronized和Lock锁都是可重入的。不可重试是指目前的分布式只能尝试一次我们认为合理的情况是当线程在获得锁失败后他应该能再次尝试获得锁。超时释放我们在加锁时增加了过期时间这样的我们可以防止死锁但是如果卡顿的时间超长虽然我们采用了lua表达式防止删锁的时候误删别人的锁但是毕竟没有锁住有安全隐患主从一致性如果Redis提供了主从集群当我们向集群写数据时主机需要异步的将数据同步给从机而万一在同步过去之前主机宕机了就会出现死锁问题。 一、分析可重入 1.原理 在Lock锁中他是借助于底层的一个voaltile的一个state变量来记录重入的状态的比如当前没有人持有这把锁那么state0假如有人持有这把锁那么state1如果持有这把锁的人再次持有这把锁那么state就会1 如果是对于synchronized而言他在c语言代码中会有一个count原理和state类似也是重入一次就加一释放一次就-1 直到减少成0 时表示当前这把锁没有被人持有。 在redission中也支持可重入锁 在分布式锁中他采用hash结构用来存储锁其中大key表示表示这把锁是否存在用小key表示当前这把锁被哪个线程持有所以接下来我们一起分析一下当前的这个lua表达式 2、获取锁源码 我们点进去Redisson获取锁的源码  可以发现如下代码  也就是下面的代码 -- 判断是否存在 if ((redis.call(exists, KEYS[1]) 0)-- 存在判断是否是自己的锁 or (redis.call(hexists, KEYS[1], ARGV[2]) 1)) then-- 不存在获取锁或者是自己的锁次数加1redis.call(hincrby, KEYS[1], ARGV[2], 1);-- 设置过期时间redis.call(pexpire, KEYS[1], ARGV[1]);-- 返回nilreturn nil; end ; -- 返回剩余过期时间 return redis.call(pttl, KEYS[1]); 1.这个地方一共有3个参数3 KEYS[1] 锁名称 ARGV[1] 锁失效时间 ARGV[2] id : threadId; 锁的小key exists: 判断数据是否存在 name是lock是否存在,如果0就表示当前这把锁不存在 redis.call(hincrby, KEYS[1], ARGV[2], 1); 直接获取锁并且计数器置1 如果当前这把锁存在则第一个条件不满足再判断 redis.call(hexists, KEYS[1], ARGV[2]) 1 此时需要通过大key小key判断当前这把锁是否是属于自己的如果是自己的则进行 redis.call(hincrby, KEYS[1], ARGV[2], 1) 将当前这个锁的value进行1 redis.call(pexpire, KEYS[1], ARGV[1]); 然后再对其设置过期时间如果以上两个条件都不满足则表示当前这把锁抢锁失败最后返回pttl即为当前这把锁的失效时间 3、释放锁源码  -- 判断锁是否存在 if (redis.call(hexists, KEYS[1], ARGV[3]) 0) thenreturn nil; end;-- 存在计数器-1 local counter redis.call(hincrby, KEYS[1], ARGV[3], -1);-- 如果计数器大于0则设置过期时间 if (counter 0) thenredis.call(pexpire, KEYS[1], ARGV[2]);return 0; else-- 否则释放锁redis.call(del, KEYS[1]);-- 同时发布一个消息到指定channel通知锁已经释放redis.call(publish, KEYS[2], ARGV[1]);return 1; end;return nil; 首先判断锁是否存在存在则计数器-1如果计数器大于0则刷新过期时间否则释放锁同时发布消息通知已释放锁  4、流程图  整个流程也就是这个流程图 二、分析解决不可重试
http://www.zqtcl.cn/news/91265/

相关文章:

  • 动漫网站建设的目的it外包公司怎么找
  • 怎样打开网站制作千图app的优势
  • 网站建设销售经理职责大桥石化集团网站谁做的
  • 黄金网站软件免费靖江seo快速排名
  • 网站建设经验做法和取得的成效wordpress 浏览器兼容
  • 代理记账注册公司图片商丘网站seo
  • 北京网站建设推荐安徽秒搜科技河南建设工程信息网招标公告
  • 网站开发项目实训总结微网站设计
  • 山东济南建网站公司东莞排名seo网站关键词优化
  • 找网站建设企业培训机构哪家最好
  • 建什么类型个人网站比较好开发高端网站建设价格
  • 网站开发 卡片网站建设合同需要印花税
  • 手机端网站图片上传如何做新公司取名字大全免费
  • vue.js网站建设智慧团建官方网站登录入口
  • 江宁区建设局网站网站建设 美食站点
  • 哈尔滨松北区建设局网站唐山企业网站模板建站
  • 服装公司网站策划书外网设计灵感网站
  • 学做婴儿衣服网站windows 建网站
  • 银饰品网站建设规划策划书wordpress近义词搜索
  • 淘宝联盟网站推广位怎么做网站开发合同支付
  • 有没有一些有试卷做的网站ios开发教程
  • 网站备案服务类型红酒公司网站源码
  • 南宁网站优化推广方案4000套微信小游戏源码
  • 什么犁网站做淘宝门头阿里云 wordpress建站
  • 免费网站建设凡科设计师的网站有哪些
  • 微信公众号运营方法seo 排名 优化
  • 深圳做营销网站设计淘宝网官方网站免费下载
  • 菏泽住房和城乡建设厅网站企业查询官网免费查询一下
  • 青海网站建设公司电话163 com邮箱注册
  • 建设法律法规文本查询网站自由设计师是什么意思