24.Redis Transaction事务
2022/8/13 2:23:07
本文主要是介绍24.Redis Transaction事务,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Redis 事务的目的是方便用户一次执行多个命令。执行 Redis 事务可分为三个阶段:
- 开始事务
- 命令入队
- 执行事务
Redis事务特性
Redis 事务具有两个重要特性:
1) 单独的隔离操作
事务中的所有命令都会被序列化,它们将按照顺序执行,并且在执行过的程中,不会被其他客户端发送来的命令打断。
2) 不保证原子性
在 Redis 的事务中,如果存在命令执行失败的情况,那么其他命令依然会被执行,不支持事务回滚机制。
注意:Redis 不支持事务回滚,原因在于 Redis 是一款基于内存的存储系统,其内部结构比较简单,若支持回滚机制,则让其变得冗余,并且损耗性能,这与 Redis 简单、快速的理念不相符合。
Redis事务命令
命令 | 说明 |
---|---|
MULTI | 开启一个事务 |
EXEC | 执行事务中的所有命令 |
WATCH key [key ...] | 在开启事务之前用来监视一个或多个key 。如果事务执行时这些 key 被改动过,那么事务将被打断。 |
DISCARD | 取消事务。 |
UNWATCH | 取消 WATCH 命令对 key 的监控。 |
Redis事务应用
您可以把事务可以理解为一个批量执行 Redis 命令的脚本,但这个操作并非原子性操作,也就是说,如果中间某条命令执行失败,并不会导致前面已执行命令的回滚,同时不会中断后续命令的执行(不包含监听 key 的情况)。示例如下:
开启事务 127.0.0.1:6379> MULTI OK 127.0.0.1:6379> INCR 1 QUEUED #命令入队成功 127.0.0.1:6379> SET num 10 QUEUED #批量执行命令 127.0.0.1:6379> EXEC 1) (integer) 1 2) OK
若您在事务开启之前监听了某个 key,那么您不应该在事务中尝试修改它,否则会导致事务中断。
开启事务之前设置key/value,并监听 127.0.0.1:6379> set www.biancheng.net hello OK 127.0.0.1:6379> WATCH www.biancheng.net OK 127.0.0.1:6379> get www.biancheng.net "hello" #开启事务 127.0.0.1:6379> MULTI OK #更改key的value值 127.0.0.1:6379> set www.biancheng.net HELLO QUEUED 127.0.0.1:6379> GET www.biancheng.net QUEUED #命令执行失败 127.0.0.1:6379> EXEC (error) EXECABORT Transaction discarded because of previous errors. #取消监听key 127.0.0.1:6379> UNWATCH OK
这篇关于24.Redis Transaction事务的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-03-21redisinsight-v2
- 2024-02-26Typed property App\Api\Mapper\GamePropsConfigMapper::$apiRedis must not be accessed before initia-icode9专业技术文章分享
- 2024-02-21redisson getlock
- 2024-02-20redis config
- 2024-02-20redis leaderboard
- 2024-01-23缓存选型:Redis or MemCache
- 2024-01-22面试官:Redis持久化能关吗?怎么关?
- 2024-01-21Redis压测工具redis-benchmark-icode9专业技术文章分享
- 2024-01-19这才是你应该了解的Redis数据结构!
- 2024-01-18Redis系列:使用 Redis Module 扩展功能