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

Redis 的 SETNX

Redis 的 SETNX 命令是一个用于设置键的值的原子性操作。SETNX 表示 "SET if Not eXists",即当键不存在时才进行设置。该命令可以实现一种简单的分布式锁和限流策略。

SETNX 命令的语法如下:

 

复制代码

SETNX key value

  • key:要设置的键名。
  • value:要设置的键值。

SETNX 的工作原理如下:

  1. 当执行 SETNX 命令时,Redis 会检查给定的键是否存在。
  2. 如果键不存在,则设置键的值为指定的值,并返回成功(1)。
  3. 如果键已经存在,则不做任何操作,直接返回失败(0)。

SETNX 命令的原子性操作保证了在多个客户端同时尝试设置同一个键时只有一个客户端能够成功。这个特性可以用来实现分布式锁和限流等功能。

在限流场景中,我们可以使用 SETNX 命令来获取一个锁。如果 SETNX 命令返回成功,表示获得了锁,可以继续执行后续操作;如果返回失败,表示其他请求已经持有了锁,那么当前请求就需要等待或者被拒绝。

结合自增操作,可以实现基于计数器的限流策略。通过 SETNX 获取锁之后,对计数器进行自增操作,然后判断计数器的值是否超过限制,从而控制请求的通过速率。

需要注意的是,在使用 SETNX 命令实现锁和限流时,一定要设置合适的过期时间以防止死锁或长时间占用资源。通常情况下,我们会为锁设置一个较短的过期时间,确保在一段时间后自动释放锁,避免资源浪费。

相关文章:

  • 【AIGC】Stable Diffusion的常见错误
  • 第9章 网络编程
  • 一分钟了解电脑关机快捷键是什么!
  • 2024年 前端JavaScript入门到精通 第一天
  • LabVIEW网络测控系统
  • C语言程序设计(第四版)—习题7程序设计题
  • 【AIGC】Stable Diffusion的ControlNet插件
  • Unity类银河恶魔城学习记录7-5 p71 Improving sword throwing state源代码
  • HCIA-HarmonyOS设备开发认证V2.0-内核扩展组件
  • Linux第57步_“linux系统镜像”和“根文件系统”重新打包小结
  • Llama-Factory的baichuan2微调
  • 2000-2021年县域指标统计数据库
  • Python编程-二万字浅谈装饰器原理与装饰器设计模式和函数式编程案例讲解
  • linux的make和makefile
  • 第三节 zookeeper基础应用与实战2
  • [case10]使用RSQL实现端到端的动态查询
  • ES6语法详解(一)
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Git 使用集
  • KMP算法及优化
  • Less 日常用法
  • Linux快速复制或删除大量小文件
  • Next.js之基础概念(二)
  • React16时代,该用什么姿势写 React ?
  • Spring核心 Bean的高级装配
  • 多线程事务回滚
  • 记一次用 NodeJs 实现模拟登录的思路
  • 类orAPI - 收藏集 - 掘金
  • 免费小说阅读小程序
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 如何胜任知名企业的商业数据分析师?
  • 实现菜单下拉伸展折叠效果demo
  • 运行时添加log4j2的appender
  • k8s使用glusterfs实现动态持久化存储
  • 我们雇佣了一只大猴子...
  • ​Java并发新构件之Exchanger
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • # 透过事物看本质的能力怎么培养?
  • #{}和${}的区别?
  • #13 yum、编译安装与sed命令的使用
  • #Java第九次作业--输入输出流和文件操作
  • (分享)自己整理的一些简单awk实用语句
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • . NET自动找可写目录
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET Reactor简单使用教程
  • .Net Web项目创建比较不错的参考文章
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET程序员迈向卓越的必由之路
  • .NET多线程执行函数
  • .NET命令行(CLI)常用命令
  • /run/containerd/containerd.sock connect: connection refused