【redis笔记】分布式锁

什么需要分布式锁

分布式场景下,原单机的多进程多线程并发控制策略会失效,典型的像海量key分布在redis集群中,那么对这些key的并发修改操作就不像单机那样容易保证有序(单机的锁只对单机有效),这时就需要使用分布式锁来实现并发控制。

通常可以有以下几种分布式锁实现方式:

  • 基于数据库实现
  • 基于redis实现
  • 基于Zookeeper实现

我们可以使用redis来实现分布式的锁来控制分布式应用的并发策略。利用的是setnx在已经设置值后,会返回0的特性。

怎么避免分布式锁一直被占用

通常我们需要避免某个任务一直占用锁导致其他任务无法顺利执行的场景,我们可以通过设置锁的过期时间来让锁自动失效。

为了上锁后如果出现redis服务异常,导致过期时间设置失败,一般上锁时要同步进行过期时间设置,如下上锁并设置lock过期时间10秒

c 复制代码
set lock 1 nx ex 10

怎么避免锁被误删除

考虑以下场景,A加了一把锁,过期时间3秒,在手动释放锁之前过期了,B这时加锁进行了自己的操作,这时A执行到了解锁,就会导致A把B加的锁删除了

一种有效的解决方案是每个具体的服务生成一个uuid,当我们加锁时,我们把值设置成自己的uuid,释放锁的时候去获取此时锁的uuid值,如果一样就释放,不一样就不释放。

但由于比较和删除的操作不是原子的,如果我们比较是否相等之后,还没删除,就过期了,如果刚好被另外一个服务抢占了,那么还是会误删除。为了解决这个问题,我们也可以使用LUA脚本来保证执行的原子性

相关推荐
奋发向前wcx6 小时前
y1,y2总复习笔记10 2026.7.24
笔记·哈希算法·散列表
海兰6 小时前
【数据库】tdsql(mysql8.0)优化思考三
数据库·redis
MuMuMu12237 小时前
智慧监测的“火眼金睛”:当AIoT重构环保监管体系
笔记
一只小菜鸡..8 小时前
南京大学 操作系统 (JYY) 学习笔记:进程地址空间与内存“外挂”魔法
笔记·学习
一只小菜鸡..9 小时前
南京大学 操作系统 (JYY) 学习笔记:访问操作系统的对象与“一切皆文件”
笔记·学习
韩楚风14 小时前
【参天引擎】一次宕机后的数据恢复,让我把 Cantian 持久化与恢复的六大机制全搞明白了
服务器·网络·数据库·分布式·mysql·架构·cantian
摇滚侠15 小时前
《RocketMQ 官网》阅读笔记 RocketMQ 消息队列 MessageQueue 消息 Messagege
笔记·rocketmq
Ztt66666666615 小时前
【无标题】
经验分享·笔记·其他·百度·微信公众平台
依然范特东15 小时前
强化学习笔记4--TD算法
笔记
AOwhisky16 小时前
Linux(CentOS)系统管理入门笔记(第十五期)——文件系统与存储管理(上篇):设备识别、挂载与文件查找
linux·运维·笔记·centos·文件系统