【分布式架构】分布式锁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. 分布式锁失效的场景
    先事务再加锁的场景会失效;因为并发下,锁先释放,但是事务未提交,下一个线程会读未提交的数据
相关推荐
rising start5 分钟前
二、全面理解MySQL架构
mysql·架构
麦客奥德彪39 分钟前
Android Skills
架构·ai编程
candyTong1 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
沪漂阿龙2 小时前
面试题详解:智能客服 Agent 系统全栈拆解——Rasa Pro、对话管理、意图识别、GraphRAG、Qwen 与 RAG 优化实战
人工智能·架构
辰海Coding3 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
云边云科技_云网融合4 小时前
企业大模型时代的网络架构五层演进:从连接到智能的范式重构
网络·重构·架构
Yunzenn4 小时前
字节最新研究cola-DLM第 01 章:语言生成的三次范式之争 —— 从 RNN 到 AR 到扩散
架构·github
她的男孩4 小时前
从零搭一个企业后台,为什么我把能力拆成 Starter 和 Plugin
java·后端·架构
啷里格啷4 小时前
第二章 Fast-DDS 整体架构与分层框架
后端·架构
DolphinDB4 小时前
漫长人工,耗费存储?用 BackupRestore 模块一站式解决跨环境数据同步难题
运维·后端·架构