Redis——公平锁
原创什么是分布式锁?
- 分布式锁: 执行逻辑处理时经常遇到并发问题。在帮助下redis实现分布式锁,简单地说,就是限制两个操作在不同的时间执行。,每次执行操作时,使用setnx()加锁,未锁定时,执行下一操作。.限制程序的并发执行。!
- 一般步骤: 使用 setnx(set if not exists) 指示,仅允许一个客户占用坑。先来先跑然后打电话 del 命令释放坑。
- setnx lock:XXX true
分布式锁问题
-
释放锁: 如果执行的一半出现问题,没有执行del释放锁,然后锁不会被释放
您可以添加锁expire过期时间
-
锁定超时问题: 当设置的过期时间相对较短时,程序可能尚未完成。,锁已过期.第二线程重新持有锁, 然而,锁在第一个线程执行业务逻辑后立即释放,第三个线程将锁定在第二个线程中。 我在系列执行之间锁定了。(超时后使用del 导致其他线程的锁被错误删除)
- 分布式锁不应用于长期任务。
- 给value设置随机数,发布时,匹配的随机数是否一致,然后删除
- 编写守护程序,当锁即将到期时,任务还没有结束。,能给锁带来一波生命(过期时间),任务结束关闭后台进程
lua该脚本实现了匹配和删除的原子操作。
# delifequals
if redis.call("get",KEYS[1]) == ARGV[1]
then
return redis.call("del",KEYS[1])
else
return 0
end
eval($lua,参数);
- 请求锁定失败的处理:
- 抛出异常,稍后重试
- 将请求添加到延迟队列。
- sleep几秒钟
分布式锁应用场景
- 并发请求,如订单
- 任务队列
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
上一篇:Redis——布隆净化器 下一篇:Redis小常识
itfan123





