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

网站个人备案搜一搜站长工具

网站个人备案,搜一搜站长工具,wordpress 模板 字体大小,食品行业网站建设方案线程1现在持有锁之后,在执行业务逻辑过程中,他正准备删除锁,而且已经走到了条件判断的过程中,比如他已经拿到了当前这把锁确实是属于他自己的,正准备删除锁,但是此时他的锁到期了,那么此时线程2…

线程1现在持有锁之后,在执行业务逻辑过程中,他正准备删除锁,而且已经走到了条件判断的过程中,比如他已经拿到了当前这把锁确实是属于他自己的,正准备删除锁,但是此时他的锁到期了,那么此时线程2进来,但是线程1他会接着往后执行,当他卡顿结束后,他直接就会执行删除锁那行代码,相当于条件判断并没有起到作用,这就是删锁时的原子性问题,之所以有这个问题,是因为线程1的拿锁,比锁,删锁,实际上并不是原子性的,我们要防止刚才的情况发生
在这里插入图片描述
Redis提供了Lua脚本功能,在一个脚本中编写多条Redis命令,确保多条命令执行时的原子性。Lua是一种编程语言,它的基本语法大家可以参考网站:https://www.runoob.com/lua/lua-tutorial.html,这里重点介绍Redis提供的调用函数,我们可以使用lua去操作redis,又能保证他的原子性,这样就可以实现拿锁比锁删锁是一个原子性动作了,作为Java程序员这一块并不作一个简单要求,并不需要大家过于精通,只需要知道他有什么作用即可。
接下来就是我们之前释放锁的逻辑:
释放锁的业务流程是这样的

​ 1、获取锁中的线程标示

​ 2、判断是否与指定的标示(当前线程标示)一致

​ 3、如果一致则释放锁(删除)

​ 4、如果不一致则什么都不做

如果用Lua脚本来表示则是这样的:

最终我们操作redis的拿锁比锁删锁的lua脚本就会变成这样

-- 这里的 KEYS[1] 就是锁的key,这里的ARGV[1] 就是当前线程标示
-- 获取锁中的标示,判断是否与当前线程标示一致
if (redis.call('GET', KEYS[1]) == ARGV[1]) then-- 一致,则删除锁return redis.call('DEL', KEYS[1])
end
-- 不一致,则直接返回
return 0

下面就是在java中如何调用,我们的RedisTemplate中,可以利用execute方法去执行lua脚本。
Java代码

private static final DefaultRedisScript<Long> UNLOCK_SCRIPT;static {UNLOCK_SCRIPT = new DefaultRedisScript<>();UNLOCK_SCRIPT.setLocation(new ClassPathResource("unlock.lua"));UNLOCK_SCRIPT.setResultType(Long.class);}@Overridepublic void unLock() {// 调用lua脚本stringRedisTemplate.execute(UNLOCK_SCRIPT,Collections.singletonList(KEY_PREFIX + name),Collections.singletonList(ID_PREFIX + Thread.currentThread().getId()));}

小总结:

基于Redis的分布式锁实现思路:

  • 利用set nx ex获取锁,并设置过期时间,保存线程标示
  • 释放锁时先判断线程标示是否与自己一致,一致则删除锁
    • 特性:
      • 利用set nx满足互斥性
      • 利用set ex保证故障时锁依然能释放,避免死锁,提高安全性
      • 利用Redis集群保证高可用和高并发特性

测试逻辑:
第一个线程进来,得到了锁,手动删除锁,模拟锁超时了,其他线程会执行lua来抢锁,当第一天线程利用lua删除锁时,lua能保证他不能删除他的锁,第二个线程删除锁时,利用lua同样可以保证不会删除别人的锁,同时还能保证原子性。

http://www.khdw.cn/news/56116.html

相关文章:

  • 网站怎么做谷歌权重最新旅游热点
  • 合肥市城乡建设网站合肥网站维护公司
  • 开发手机app用什么语言网站查询seo
  • 福州建设网站设计长春网络推广公司哪个好
  • wordpress 站点转移微营销官网
  • 郴州网站建设哪个好腾讯网qq网站
  • 网站设计专业公司价格广告软文范例大全100字
  • 网站建设和网页制作软文广告案例分析
  • 网站做百度权重排名论坛网红推广接单平台
  • 山西做网站运营的公司员工培训内容
  • 网站开发项目视频seo培训教程
  • 哈尔滨市人社app广州seo排名优化服务
  • 网站页面优化包括苏州网站优化排名推广
  • 广州市安全教育平台登录吴中seo页面优化推广
  • 北京网站建设联系电话能搜任何网站的浏览器
  • 蚌埠网站建设文章南昌seo排名扣费
  • 哪个网站可以专门做超链接网络推广公司有多少家
  • 建设大型门户网站付费推广外包
  • 深圳建网站公司哪家好搜狗收录提交入口
  • 古腾堡 主题 wordpress优化大师班级
  • 注册网站后邮箱收到邮件免费推广方式都有哪些
  • 推广类网站百度地图在线使用
  • 上海装修公司排名境远长沙网站se0推广优化公司
  • 平安夜苹果营销策划方案seo专业技术培训
  • 广州建企业网站网站制作流程图
  • 如何创办自己的网站5118营销大数据
  • 怎么制作移动端网站网站建设需要啥
  • 合肥网站建设pqiw百度站长平台怎么用
  • 手机网站大全网址大全建站
  • 交易平台app下载福鼎网站优化公司