Redis 的事务机制

Redis 的事务并不是严格意义上的事务,它只是一种将多个命令打包,然后一次性、按顺序地执行的机制,它并不具备原子性,Redis 的原子性是针对单条命令的,批量指令的原子性无法保证。

这是官网上的说明 :

From redis docs on transactions:

It's important to note that even when a command fails, all the other commands in the queue are processed -- Redis will not stop the processing of commands.

Redis 的事务基本上可以分为三个阶段:

  1. 开启事务
  2. 命令入队
  3. 执行事务

MUTLI 命令用于开启事务,EXEC 命令用于执行事务,DISCARD 命令用于取消事务。

Redis 的事务不能回滚,如果在事务执行过程中出现错误,那么 Redis 会继续执行剩余的命令,而不是回滚。

因为 Redis 是单线程的,所以 Redis 会将事务中的所有命令按照顺序执行,期间不会有其他命令插入。

使用场景

数据同步操作:在同步数据到多个缓存或数据集时,确保每个数据源的一致性更新是很关键的。通过 Redis 事务,可以保证多个键值对同时更新。

shell 复制代码
MULTI
SET key1 value1
SET key2 value2
SET key3 value3
EXEC

批量操作:当需要在短时间内完成大量 Redis 操作时,使用事务可以减少网络开销。通过事务执行所有命令,只需要发送一次请求,减少了重复发送消息的需要。

shell 复制代码
MULTI
LPUSH list_key item1
LPUSH list_key item2
LPUSH list_key item3
EXEC

计数器操作:在分布式系统中,可能需要统计一些任务完成的数量;这种场景下,使用原子性操作来保证递增或递减的正确性。

shell 复制代码
MULTI
INCR completed_tasks
DECR pending_tasks
EXEC

注意

因为 Redis 的事务并不具备原子性,所以在使用事务时,需要注意以下几点:

  1. 不能取代数据库事务
  2. 本质是一组打包的命令
  3. 不能回滚
相关推荐
m0_639906949 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
IT规划师15 小时前
Redis 数据类型全解 - String 不只是 get set:90% 开发者忽略的 8 个高阶用法与内存陷阱(一)
redis·.net core
Flynn Liang16 小时前
内存/Redis/PGVector/Milvus/ES 怎么选?Spring AI VectorStore 抽象与向量库选型对照表
redis·elasticsearch·milvus·rag·springai·pgvector·向量库
hweiyu0018 小时前
Redis命令:SUNIONSTORE
redis·缓存
麻瓜code18 小时前
秒杀优化三连:Lua + 阻塞队列 + Redis Stream,响应从 3.4 秒到毫秒级
redis·junit·lua
没有气的汽水1 天前
一次生产 Redis 内存打满的排查、清理和复盘
redis
hey you~1 天前
云呼叫中心坐席自动分配实战:ACD 策略、Redis+Lua 实现与排查清单
数据库·redis·lua·云呼叫中心·acd·坐席分配·坐席状态机
我不会起名字3221 天前
Redis pipeline 用了反而更慢:3 类误用与正确的批量姿势
redis·pipeline·lua·rtt·批量
Tsuki_tl1 天前
【总结】Redis五大数据类型应用场景及基本命令
数据库·redis·后端·缓存·缓存中间件·redis命令·redis 五大数据类型