栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

26/31Day 孤尽训练营笔记分享

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

26/31Day 孤尽训练营笔记分享

       对于微服务项目来说,事务一直是比较核心的一个技术点,这篇文章将讲述有关Redis分布式锁的一些介绍

分布式锁简介

        在同一个JVM内部,大家往往采用synchronized或者Lock的方式来解决多线程间的安全问题,但是在分布式架构下,在JVM之间,那么就需要一种更加高级的锁机制,来处理种跨JVM进程之间的线程安全问题,解决方案就是:使用分布式锁。

Redis分布式锁分析   Redis分布式锁原理

        Redis分布式锁机制,主要借助setnx和expire两个命令完成

• setnx
        当key不存在,将key设置为value,存在不做任何操作,返回0
• expire
        设置key过期时间

     原理解析

• key不存在时创建,并设置value和过期时间,返回值为1;成功获取到锁
• 如果key存在,则直接返回0,强锁失败
• 持有锁的线程释放锁时,手动删除key;或者过期时间到,key自动删除,锁释放

     原理解析

• 加锁的问题
  >setnx成功,expire失败,如果没有收到释放,那么这个锁永远被占用,其他线程永远也抢不到锁
• 解决方案
  >使用set的命令时,同时设置过期时间,
    命令:set lock “hello” EX 200NX
  >使用LUA脚本,将加锁的命令放在lua脚本中原子性的执行

有关redis命令补存

• EX seconds:设置失效时长,单位秒
• PX milliseco失效 nds:设置时长,单位毫秒
• NX :只在键不存在时,才对键进行设置操作
• XX :只在键已经存在时,才对键进行设置操作

  jedis分布式锁实现

     Redis分布式锁实现-加锁:就是调用SET key PX NX命令
        set key value [EX seconds] [PX milliseconds] [NX|XX]

     Redis分布式锁实现-解锁:正确解锁调用lus脚本进行解锁

  锁过期问题

     预估业务操作10秒,锁设置20秒,各种原因,比如STW问题,业务操作执行超过了20秒,业务会在无锁状态下运行,就会发生数据紊乱。
     注:STW:Java中Stop-The-world机制简称STW,常发生于fullGC,这时Java应用程序的其他所有线程都被挂起(除了垃圾收集器之外)

• 乐观锁方式,增加版本号
• watch dog 自动延期

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

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

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