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

Redis分布式锁

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

Redis分布式锁

分布式锁介绍

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

Redis分布式锁

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

  1. setnx 当key 不存在,将key 设置为value, 存在不做任何操作,返回0.
  2. expire 设置key 过期时间。
    原理解析:
  3. key 不存在时创建,并设置value 和过期时间,返回值为1, 成功获取到锁。
    如key 存在时直接返回0,抢锁失败。
    持有锁的线程释放锁时,手动删除key, 或者过期时间到,key 自动删除,锁释放。

set key value[Ex seconds] [PX millisecomds] [NX|XX]
EX second: 设置失效时长, 单位秒
milliseco 失效 nds: 设置时长,单位毫秒
key 不存在时设置value, 成功返回OK ,失败返回nil
XX key 存在时设置valuem, 成功 返回OK ,失败返回nil

Jedis 分布式锁实现

set key value [EX seconds] [PX millseconds] [NX|NX] key 加锁的key
value UUID.randomUUID().tostring(). 代表加锁的客户端请求标识。 nxxx nx 表示SET IF
NOT EXIS 可以使用T expx PX 表示毫秒 time: 表示过期时间

Redisson分布式锁

Redisson 是 基于 Netty的Redis 客户端。不但能操作原生的Redis 数据结构,还为使用者提供了一系列具有分布式特性的常用工具类,实现了分布式锁。

Redisson 分布锁原理
加索

  1. 判断有没有 “DISLOCK”
  2. 如果没有,设置UUID:1 = 1
  3. 设置它的过期时间
    锁重入
  4. key 和字段都存在,锁重入
  5. 执行命令incrby UUID:1 1
  6. 结果:DISLOCK: {UUID: 1 2}
    锁互斥
    1 .客户端2 进入
  7. 判断有KEY,没有字段
  8. 返回过期时间
  9. 客户端2 自旋等待
分段锁

初始化分段锁库存。
分段锁扣减库存。

参考:开课吧-刘雪松老师的讲义。

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

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

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