尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Redis提供的原子性命令

Redis提供的原子性命令
📅 发布时间:2026/6/19 19:52:55

目录
  • Redis提供的原子性命令
    • 主要类别的原子性命令:
      • 1. 字符串(String)原子操作
      • 2. 列表(List)原子操作
      • 3. 集合(Set)原子操作
      • 4. 哈希(Hash)原子操作
      • 5. 有序集合(Sorted Set)原子操作
      • 6. 位图(Bitmap)原子操作
      • 7. HyperLogLog 原子操作
      • 8. 地理空间(Geospatial)原子操作
    • 高级原子操作
      • 1. 事务(Transaction)
      • 2. Lua 脚本
      • 3. 条件操作
      • 4. 流(Stream)原子操作
    • 原子性使用示例:
      • 示例1:分布式锁
      • 示例2:原子计数器+过期时间
      • 示例3:原子列表操作
    • 重要注意事项:

Redis提供的原子性命令

主要类别的原子性命令:

1. 字符串(String)原子操作

  • INCR / DECR:原子递增/递减整数
  • INCRBY / DECRBY:原子增加/减少指定数值
  • INCRBYFLOAT:原子增加浮点数值
  • SETNX:仅当键不存在时设置(用于分布式锁基础)
  • GETSET:设置新值并返回旧值(原子替换)

2. 列表(List)原子操作

  • LPUSH / RPUSH:从左/右原子插入元素
  • LPOP / RPOP:从左/右原子弹出元素
  • BRPOP / BLPOP:阻塞式原子弹出(常用于消息队列)

3. 集合(Set)原子操作

  • SADD / SREM:原子添加/移除元素
  • SINTER / SUNION / SDIFF:原子求交集、并集、差集
  • SPOP:原子随机移除并返回元素

4. 哈希(Hash)原子操作

  • HSET / HGET:原子设置/获取字段值
  • HINCRBY:原子递增哈希字段值
  • HMSET / HMGET:原子批量操作

5. 有序集合(Sorted Set)原子操作

  • ZADD / ZREM:原子添加/移除成员
  • ZINCRBY:原子增加成员分数
  • ZINTERSTORE / ZUNIONSTORE:原子计算交集/并集

6. 位图(Bitmap)原子操作

  • SETBIT / GETBIT:原子位操作
  • BITOP:原子位运算(AND/OR/XOR/NOT)
  • BITCOUNT:原子统计位数

7. HyperLogLog 原子操作

  • PFADD / PFCOUNT / PFMERGE:基数估计的原子操作

8. 地理空间(Geospatial)原子操作

  • GEOADD / GEODIST / GEORADIUS:原子地理操作

高级原子操作

1. 事务(Transaction)

虽然 MULTI/EXEC 是事务,但 Redis 事务保证的是顺序执行而非原子回滚(中途出错不会回滚已执行命令)。

2. Lua 脚本

通过 EVAL 或 EVALSHA 执行 Lua 脚本是真正的原子操作:

  • 脚本在执行期间不会被其他命令中断
  • 适合复杂逻辑的原子执行
EVAL "local current = redis.call('GET', KEYS[1]); if current == ARGV[1] then return redis.call('SET', KEYS[1], ARGV[2]) else return nil end" 1 mykey oldvalue newvalue

3. 条件操作

  • SET key value NX:等同于 SETNX(键不存在时设置)
  • SET key value XX:键存在时设置
  • SET key value EX seconds NX:原子实现带过期时间的分布式锁

4. 流(Stream)原子操作

  • XADD:原子添加消息到流
  • XREADGROUP:消费者组原子读取

原子性使用示例:

示例1:分布式锁

# 获取锁(原子操作)
SET lock:resource unique_id NX EX 30# 释放锁(Lua脚本保证原子性)
EVAL "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end" 1 lock:resource unique_id

示例2:原子计数器+过期时间

# 原子递增并设置过期时间
MULTI
INCR mycounter
EXPIRE mycounter 60
EXEC

示例3:原子列表操作

# 原子地从列表获取并处理
RPOP myqueue
# 或者阻塞版本
BRPOP myqueue 30

重要注意事项:

  1. 网络分区:原子性只在单个 Redis 实例上保证,集群环境下需注意
  2. Lua 脚本:是复杂原子操作的最佳选择,但应避免长时间运行的脚本
  3. WATCH/MULTI/EXEC:乐观锁机制,适用于需要读取-修改-写入的场景

Redis 通过这些原子命令,使得在无需外部锁的情况下,就能安全地处理并发场景,这是它高性能的重要原因之一。

相关新闻

  • 2025年12月室内水上乐园厂家推荐:山东汇川,儿童水上乐园、大型水上乐园、主题水上乐园、室外水上乐园、恒温泳池、室 泳池、全场景适配新标杆
  • Semaphore、CountDownLatch、ReentrantLock使用场景简单说说
  • 杂题选记

最新新闻

  • 端午充电季|乘风破浪,技能进阶正当时
  • 武汉想养猫狗先看看,梦宠山庄探店记录 - 园友3800037
  • FanControl V270终极指南:Windows系统智能风扇控制的完整解决方案
  • 海口黄金回收避坑指南!2026本地行情解析,这样卖金更划算✨ - 奢品小当家
  • MC68060软件包深度解析:浮点库实现与操作系统集成实战
  • C语言数学函数库深度解析:fabs、fmod、hypot的原理、陷阱与工程实践

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号