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

Redis提供的原子性命令

目录
  • 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 脚本

通过 EVALEVALSHA 执行 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 通过这些原子命令,使得在无需外部锁的情况下,就能安全地处理并发场景,这是它高性能的重要原因之一。

http://www.rkmt.cn/news/79874.html

相关文章:

  • 2025年12月室内水上乐园厂家推荐:山东汇川,儿童水上乐园、大型水上乐园、主题水上乐园、室外水上乐园、恒温泳池、室 泳池、全场景适配新标杆
  • Semaphore、CountDownLatch、ReentrantLock使用场景简单说说
  • 杂题选记
  • 2025年12月铝材厂家推荐榜:廊坊国美铝业,工业铝材、门窗铝材、3C铝材、通用铝材、多领域铝材定制与绿色生产标杆
  • 2025年12月包头保洁公司最新推荐:信达家政,包头保洁开荒、包头高空清洗保洁、包头保姆公司、包头保姆家政、包头保姆月嫂、包头保姆护工、服务品质新标准
  • 机器视觉测量与建模
  • [Java EE] 多线程 -- 初阶(1) - 详解
  • 2025 雅思培训班怎么选?5 大热门机构深度测评 + 避坑指南
  • day31-GraphRAG
  • 2025年12月模内注塑技术标杆厂商最新推荐:腾达鑫电子科技,引领IML/IMD/IMR/IMP个性化新标准
  • 2025年12月广东佛山智能电动伸缩门厂家TOP推荐:圣田智能科技,安全智能双标杆
  • ISCTF misc+web部分wp
  • 最短路径 - Dijkstra(堆优化)中优先队列的懒删除如何理解?
  • 第五十八篇
  • 洛谷 P1203 [USACO1.1] 坏掉的项链 Broken Necklace 题解 最短代码|详细
  • 2025年唐老狮:游戏开发教育领域深度解析与行业竞争力权威揭秘
  • day16-Trae开发飞机大战并上线
  • 2025年唐老狮权威解读:游戏开发课的体系化构建优势
  • java 多线程deubg调试
  • day14-影刀获取抖音评论-微信自动发消息
  • 您的能源预算,是否正被“异常气温”悄悄透支?智慧气象助力实现精准能耗管理 - 教程
  • 2025年热门的国标止水钢板高评价厂家推荐榜
  • 2025年知名的夜光石自发光材料/自发光材料厂家选购指南与推荐
  • 2025年比较好的衣物护理机厂家最新TOP实力排行
  • sadaasd
  • 2025年评价高的生活废水处理厂家推荐及选择参考
  • Python异步编程完全教程:asyncio/aiohttp核心用法与实战
  • 2025年热门的步入式恒温恒湿试验箱/高低温试验箱最新TOP厂家排名
  • python考点讲解- TYUT
  • 2025年口碑好的平开不锈钢合页/钢质门不锈钢合页TOP实力厂家推荐榜