redis底层原理2

该命令的含义是set if not exists,Redis是单线程的,所有的命令都是串行执行的。而且Redis的SETNX操作是原子的,即使有大量的线程同时发送SETNX命令,Redis也会一个接一个地执行这些命令。也就是说,即使有多个线程同时使用SETNX尝试获取锁,也只有一个线程能够成功。它们的SETNX命令会进入到Redis的命令队列中等待执行。当Redis执行完当前的SETNX命令后,会依次从队列中取出命令来执行。对于大量线程同时发送SETNX命令的情况,最终只有一个线程的SETNX命令能够成功设置新的value,其他线程的SETNX命令都会因为key已经存在而失败,但实际开发中我们使用Redis做分布式锁也要考虑到锁的超时问题、锁的释放问题

锁的超时问题,setnx用作锁的时候,必须要设置一个过期时间,防止这个锁无法及时释放造成死锁,且要注意setnx和expired必须是原子性的,如果不能保证原子性,那可能由于线程调度问题expired没有生效,依然会有死锁风险,过期时间设置也要结合实际线上情况,太短会出现问题


复制代码

原文链接:https://blog.csdn.net/wwwwwww31311/article/details/136678509

相关推荐
L.EscaRC5 分钟前
图数据库Neo4j原理与运用
数据库·oracle·neo4j
知己80806 分钟前
docker搭建图数据库neo4j
数据库·docker·neo4j
TDengine (老段)8 分钟前
什么是 TDengine IDMP?
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq_21539789713 分钟前
docker 安装 redis
redis·docker·容器
谅望者14 分钟前
数据分析笔记08:Python编程基础-数据类型与变量
数据库·笔记·python·数据分析·概率论
Boilermaker199218 分钟前
【MySQL】备份与恢复
数据库·mysql
q***74834 分钟前
数据库高安全—openGauss安全整体架构&安全认证
数据库·安全·架构
l***37091 小时前
redis info 详解
数据库·redis·缓存
小蜗牛爱远行1 小时前
mysql导入中文乱码问题
数据库·mysql
TangDuoduo00051 小时前
【SQLite3 C语言接口】
数据库·sqlite