谈谈 Redis 如何来实现分布式锁

谈谈 Redis 如何来实现分布式锁

基于 setnx 可以实现,但是不是可重入的。

基于 Hash 数据类型 + Lua脚本 可以实现可重入的分布式锁。

获取锁的 Lua 脚本:

释放锁的 Lua 脚本:

但是还是存在分布式问题,比如说,一个客户端在Redis主节点上面加了锁,但是由于主从同步的延迟问题,Redis从节点还没有同步到这个锁数据,这时候其他的客户端就可以在这个Redis从节点上面加相同的锁了。

引入 RedLock 解决方案。但是 RedLock 只是减少出问题的概率,而且性能差,不推荐使用。这玩意儿就是一种理论设计,平时工作用 setnx+补偿就行了

相关推荐
Elnaij几秒前
MySQL数据库入门到进阶!!(1)——在云服务器中安装MySQL(centos)
数据库·mysql
2401_831419447 分钟前
JavaScript 中实现基于分组的前端产品筛选功能
jvm·数据库·python
yexuhgu13 分钟前
CSS实现盒子阴影扩散效果_调整box-shadow的模糊半径
jvm·数据库·python
Jetev15 分钟前
CSS如何实现优雅的间距_使用CSS Grid控制盒模型间隙
jvm·数据库·python
qq_4142565715 分钟前
HTML函数开发需要独立显卡吗_HTML函数与显卡关系详解【说明】
jvm·数据库·python
CN.LG17 分钟前
Mysql5.1.41+SQLyog的详细安装教程
数据库·mysql·sqlyog
qq_3926906618 分钟前
CSS如何利用-disabled伪类禁用交互元素_通过灰度效果提升界面逻辑清晰度
jvm·数据库·python
hunteritself19 分钟前
GPT Image2 + Seedance 2.0:3 小时从剧本到 AI 互动影游,深度实测复盘
前端·数据库·人工智能·深度学习·transformer
u01102251219 分钟前
c++怎么将两个有序的文本文件合并成一个新的有序文件【实战】
jvm·数据库·python
_3762715321 分钟前
CSS如何控制全屏显示的元素样式
jvm·数据库·python