当前位置: 首页 > news >正文

redis中setnx命令的底层原理是什么

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

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

相关文章:

  • 三个表联合查询的场景分析-场景1:a表关联了b表和c表
  • 【Java基础】IO流(二)字符集知识
  • vue3路由跳转时,页面如何滚动到顶部
  • 如何更改ldap用户在local node上的默认shell
  • 从前端到前端框架
  • 专题二 - 滑动窗口 - leetcode 76. 最小覆盖子串 | 困难难度
  • Node.js入门基础—day01
  • Notepad++从文件夹查找文本内容
  • Vue2 + node.js项目
  • Apache Paimon 的 CDC Ingestion 概述
  • linux 安装gradle7.4.2环境
  • apache commons-dbcp Apache Commons DBCP 软件实现数据库连接池 commons-dbcp2
  • chatGPT的耳朵!OpenAI的开源语音识别AI:Whisper !
  • spring 面试题
  • 第三章 OpenGL ES 基础-基础-GLSL渲染纹理
  • 安卓通过termux部署ChatGLM
  • github(不是git啊)操作记录(踩坑)
  • Linux 自动检测进程是否存活,如果挂掉自动拉起
  • Nodejs 第五十四章(net)
  • linux常用命令2
  • 十三届全国政协经济委员会副主任张效廉被决定逮捕
  • “80后”李灿已任重庆市南川区领导,此前获公示拟提名为副区长人选
  • 当创业热土遇上年轻气息,上海南汇新城发展如何再发力?
  • “毛茸茸”的画,诗意、温暖又治愈
  • 秦洪看盘|交易型资金收缩,释放短线压力
  • 国家发改委:美芯片药品等领域关税影响全球科技发展,损害人类共同利益