当前位置: 首页 > 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.jsqmd.com/news/69311/

相关文章:

  • 多业态连锁环境管理系统:AI + 机器人闭环,坪效提升 16%
  • 2025年12月室内水上乐园厂家推荐:山东汇川,儿童水上乐园、大型水上乐园、主题水上乐园、室外水上乐园、恒温泳池、室 泳池、全场景适配新标杆
  • 2025雅思培训班怎么选?这5家高性价比机构帮你高效提分
  • 2025年12月水上乐园设备厂家最新推荐:昊至泉充气水上乐园设备、室内水上乐园设备、户外水上乐园设备、大型水上乐园设备、漂流河水上乐园设备、打造安全创新个性化水上娱乐新标准
  • 实用指南:「腾讯云NoSQL」技术之向量数据库篇:自研分布式向量数据库,实现毫秒级时序一致备份的挑战和实践
  • py-lambda-map-list随笔
  • 杂题选记
  • 2025年12月铝材厂家推荐榜:廊坊国美铝业,工业铝材、门窗铝材、3C铝材、通用铝材、多领域铝材定制与绿色生产标杆
  • Qt 文本转语言(QTextToSpeech类)详解 - 实践
  • AWS发布网络扫描指南:构建更安全云环境的守则
  • # 题解#洛谷P2880 Balanced Lineup #ST表#
  • 2025年12月包头保洁公司最新推荐:信达家政,包头保洁开荒、包头高空清洗保洁、包头保姆公司、包头保姆家政、包头保姆月嫂、包头保姆护工、服务品质新标准
  • 机器视觉测量与建模
  • 2025最值得报的雅思封闭班:高性价比/冲高分/打基础三类优选清单
  • 为什么会诞生流形的概念?
  • [Java EE] 多线程 -- 初阶(1) - 详解
  • 2025年12月丝杆升降机标杆厂家最新推荐:德州德特机械,螺旋升降机、sjb螺旋升降机、zimm螺旋升降机、SJA螺旋升降机、联动丝杆升降机、螺旋丝杆升降机、专注精密传动新标准
  • AQS与CAS深度讲解
  • 2025年唐老狮权威解读:游戏开发课的体系化构建优势
  • 2025年12月注浆工程厂家推荐:安徽林固,道路注浆、空鼓注浆、公路注浆、路基注浆、地基注浆、厂房注浆、地坪注浆、矿山注浆、多场景注浆解决方案服务商
  • PROFILE
  • PKU 数据结构与算法 2025 复习题 坐公交
  • 2025 雅思培训班怎么选?5 大热门机构深度测评 + 避坑指南
  • day31-GraphRAG
  • 2025年12月模内注塑技术标杆厂商最新推荐:腾达鑫电子科技,引领IML/IMD/IMR/IMP个性化新标准
  • 2025年12月广东佛山智能电动伸缩门厂家TOP推荐:圣田智能科技,安全智能双标杆
  • ISCTF misc+web部分wp
  • CF1046I Say Hello - crazy-
  • church函数与区间算术
  • day31-GraphRAG