【分布式架构】分布式锁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. 分布式锁失效的场景
    先事务再加锁的场景会失效;因为并发下,锁先释放,但是事务未提交,下一个线程会读未提交的数据
相关推荐
The Open Group1 分钟前
当企业进入平台时代:架构如何支撑生态
架构
踩着两条虫14 分钟前
VTJ.PRO 在线应用开发平台的后端模块系统
后端·架构·nestjs
王码码203518 分钟前
Flutter for OpenHarmony:使用 pluto_grid 打造高性能数据网格
flutter·http·华为·架构·harmonyos
GISer_Jing26 分钟前
Claude Code架构深度解析:从核心文件到Harness的确定性控制体系
ai·架构·aigc
踩着两条虫36 分钟前
AI驱动的Vue3应用开发平台 深入探究(十三):物料系统之区块与页面模板
前端·vue.js·人工智能·架构·系统架构
蜜獾云1 小时前
DDD 架构分层,MQ消息要放到那一层处理?
java·jvm·架构
梦想很大很大1 小时前
一个推荐系统是如何“长大”的(工程演进)
人工智能·机器学习·架构
wanhengidc1 小时前
云手机与模拟器的关系
大数据·运维·服务器·分布式·智能手机
掘根2 小时前
【微服务即时通讯】好友管理子服务2
微服务·云原生·架构
ai产品老杨2 小时前
异构计算时代的架构突围:基于 Docker 的 AI 视频平台如何实现 X86/ARM 与 GPU/NPU 全兼容(源码交付)
人工智能·docker·架构