redis分布式锁细节讲解

redis分布式锁细节讲解


Redis Setnx 命令
Redis 字符串(string)
首先了解 setnx 相关知识

Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。

语法
redis Setnx 命令基本语法如下:

redis 127.0.0.1:6379> SETNX KEY_NAME VALUE
可用版本

= 1.0.0

返回值
设置成功,返回 1 。 设置失败,返回 0 。

实例
redis> EXISTS job # job 不存在
(integer) 0

redis> SETNX job “programmer” # job 设置成功
(integer) 1

redis> SETNX job “code-farmer” # 尝试覆盖 job ,失败
(integer) 0

redis> GET job # 没有被覆盖
“programmer”
redis 锁代码
redis分布式锁细节讲解_第1张图片
图中标志1号: 表示生成一个线程A的独有标志用于图中标志4号判断 线程A的线程只能删除自己建立的锁 不能删除别的线程建立的锁,从而避免线程混乱!

图中标志2号:表示通过setnx 往redis 插入一个String类型的值 用于判断redis锁 并且给了时间redis缓存时间设置避免锁由于内部或者外部因素引起锁失效,从而导致死锁的发生!
图中标志3号:如果线程A获取到锁以后 由于setnx的特性 线程B再次执行setnx 会set value 值失败 返回 0 stringRedisTemplate 方法返回 false 则可以用于判断 线程B获取线程失败 返回不在往下执行!
图中标志4号:线程A生成的uuid标志号,用于删除自己所生成的reids锁标志,其他线程不能删除,只能等待!
图中标志5号:删除redis 缓存数据 释放分布式锁!

---------------------redisson 来实现redis分布式锁-------------
Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。【Redis官方推荐】

Redisson在基于NIO的Netty框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。
redis分布式锁细节讲解_第2张图片
redisson分布式锁逻辑图
redis分布式锁细节讲解_第3张图片

你可能感兴趣的:(分布式锁,java,redis,分布式)