Redis——公平锁

原创
小哥 3年前 (2022-11-09) 阅读数 5 #大杂烩

什么是分布式锁?

  1. 分布式锁: 执行逻辑处理时经常遇到并发问题。在帮助下redis实现分布式锁,简单地说,就是限制两个操作在不同的时间执行。,每次执行操作时,使用setnx()加锁,未锁定时,执行下一操作。.限制程序的并发执行。!
  2. 一般步骤: 使用 setnx(set if not exists) 指示,仅允许一个客户占用坑。先来先跑然后打电话 del 命令释放坑。
  3. setnx lock:XXX true

分布式锁问题

  1. 释放锁: 如果执行的一半出现问题,没有执行del释放锁,然后锁不会被释放

    您可以添加锁expire过期时间

  2. 锁定超时问题: 当设置的过期时间相对较短时,程序可能尚未完成。,锁已过期.第二线程重新持有锁, 然而,锁在第一个线程执行业务逻辑后立即释放,第三个线程将锁定在第二个线程中。 我在系列执行之间锁定了。(超时后使用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,参数);
  1. 请求锁定失败的处理:
    • 抛出异常,稍后重试
    • 将请求添加到延迟队列。
    • sleep几秒钟

分布式锁应用场景

  1. 并发请求,如订单
  2. 任务队列
版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

上一篇:Redis——布隆净化器 下一篇:Redis小常识