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 的事务基本上可以分为三个阶段:
- 开启事务
- 命令入队
- 执行事务
MUTLI 命令用于开启事务,EXEC 命令用于执行事务,DISCARD 命令用于取消事务。
Redis 的事务不能回滚,如果在事务执行过程中出现错误,那么 Redis 会继续执行剩余的命令,而不是回滚。
因为 Redis 是单线程的,所以 Redis 会将事务中的所有命令按照顺序执行,期间不会有其他命令插入。
使用场景
数据同步操作:在同步数据到多个缓存或数据集时,确保每个数据源的一致性更新是很关键的。通过 Redis 事务,可以保证多个键值对同时更新。
|
|
批量操作:当需要在短时间内完成大量 Redis 操作时,使用事务可以减少网络开销。通过事务执行所有命令,只需要发送一次请求,减少了重复发送消息的需要。
|
|
计数器操作:在分布式系统中,可能需要统计一些任务完成的数量;这种场景下,使用原子性操作来保证递增或递减的正确性。
|
|
注意
因为 Redis 的事务并不具备原子性,所以在使用事务时,需要注意以下几点:
- 不能取代数据库事务
- 本质是一组打包的命令
- 不能回滚