425 字
2 分钟
Redis如何实现分布式锁
在Redis中实现分布式锁的常见方法是通过 set ex nx命令+lua脚本组合使用,确保多个客户端不会获得同一个资源锁的同时,也保证了安全解锁和意外情况下锁的自动释放。
71%
全部章节
- 1 什么是Redis
- 2 Redis有哪些数据类型
- 3 Redisson延时队列架构
- 4 redis配置json序列化
- 5 为什么Redis设计为单线程而后面版本为啥又引入多线程呢
- 6 Redis为什么快
- 7 Redis中常见的数据类型有哪些
- 8 Redis的Hash是什么
- 9 Redis跳表
- 10 RedisZset实现原理
- 11 缓存与数据库一致性问题
- 12 Redis缓存击穿缓存穿透缓存雪崩
- 13 RedisString底层
- 14 Redis单点故障问题
- 15 Redis如何实现分布式锁 阅读中
- 16 Redis实现分布式锁的时候可能遇到的问题有哪些
- 17 Redis大Key问题
- 18 如何解决Redis中热点key的问题
- 19 Redis持久化机制
- 20 Redis数据过期后的删除策略
- 21 Redis主从复制的实现原理是什么
分布式锁
在Redis中实现分布式锁的常见方法是通过 set ex nx命令+lua脚本组合使用,确保多个客户端不会获得同一个资源锁的同时,也保证了安全解锁和意外情况下锁的自动释放。
理解Redis实现的分布式锁
如果基于Redis来实现分布式锁,需要使用set ex nx命令+ lua脚本
加锁: SET lock_key uniqueValue EX expiretime NX
解锁: 使用lua脚本,先get获取key的value判断锁是否是自己加的,如果是则del
if redis.call("GET",KEYS[1]) == ARGV[1]then return redis.call("DEL",KEYS[1])else return 0end锁需要有过期机制,假设某个客户端加锁后宕机了,锁没设置过期机制,就会让其他客户端抢不到锁。
EX expiretime 设置的单位是秒,PX expiretime设置的是毫秒
上面为啥要用uniqueValue呢,这个就是唯一的值,是为了防止锁被其他客户端释放掉。
实现分布式锁的步骤
- 加锁:使用
SET lock_key uniqueValue EX expiretime NX命令加锁 - 解锁:使用lua脚本,先get获取key的value判断锁是否是自己加的,如果是则del
- 锁需要有过期机制,假设某个客户端加锁后宕机了,锁没设置过期机制,就会让其他客户端抢不到锁。
- EX expiretime 设置的单位是秒,PX expiretime设置的是毫秒
- 上面为啥要用
uniqueValue呢,这个就是唯一的值,是为了防止锁被其他客户端释放掉。 - 锁需要有过期机制,假设某个客户端加锁后宕机了,锁没设置过期机制,就会让其他客户端抢不到锁。
发现错误或想要改进这篇文章?
在 GitHub 上编辑此页 Redis如何实现分布式锁