【分布式架构】分布式锁Redission

一、流程图

二、lua脚本实现原理

setnx +expire实现

  1. setnx:判断key是否存在,如果不存在,则获取锁
    setnx的数据结构:<key,<key1,value>>
    key:业务声明的key
    key1:线程id
    value:次数(用来做锁重入的)
  2. expire:设置key的ttl

三、FAQ

  1. 如何保证setnx命令和expire命令的原子性
    Redis 执行 Lua 脚本可以保证原子性。这是 Redis 设计中的一个关键特性,它允许开发者在 Redis 中执行一系列命令,而这些命令要么全部执行(类似事务的mulit和exec)
  2. 如何防止当前线程的分布式锁的key被其他线程删掉
    setnx会存储线程id,删除key的时候判断下value是否是当前线程
  3. 是否支持锁重入
    支持。因为value存的是当前线程的id,每次重入会+1,方法执行完-1,当等于0时候释放锁;
  4. 分布式锁失效的场景
    先事务再加锁的场景会失效;因为并发下,锁先释放,但是事务未提交,下一个线程会读未提交的数据
相关推荐
candyTong3 小时前
一觉醒来,大模型就帮我排查完页面性能问题
前端·javascript·架构
Java开发的小李3 小时前
SpringBoot + Redis 实现分布式 Session 共享(解决多实例登录状态丢失问题)
spring boot·redis·分布式
tsyjjOvO5 小时前
分布式事务 Seata 与链路追踪 SkyWalking 全解析
分布式·skywalking
空中海6 小时前
Kubernetes 入门基础与核心架构
贪心算法·架构·kubernetes
米高梅狮子7 小时前
08.CronJob和Service
云原生·容器·架构·kubernetes·自动化
SamDeepThinking9 小时前
中小团队需要一个资源微服务
后端·微服务·架构
两万五千个小时9 小时前
为什么你的 Agent 读了文件,却好像什么都没读到?
人工智能·程序员·架构
非优秀程序员10 小时前
智能体的构成--深入探讨Anthropic、OpenAI、Perplexity和LangChain究竟在构建什么。
人工智能·架构·开源
码点滴10 小时前
从“失忆症“到“数智分身“:Hermes Agent 如何重塑你的 AI 交互体验?
人工智能·架构·prompt·ai编程·hermes
狗哥哥10 小时前
面包屑自动推导的算法设计:从“最短路径匹配”到工程可落地
算法·架构