Redis事务
2020-07-13 05:35
92 查看
一.事务的实现
三个阶段:
- 事务开始
- 命令入队
- 事务执行
事务队列:
以下为例
127.0.0.1:6379> MULTI OK 127.0.0.1:6379> set "name" "cc" QUEUED 127.0.0.1:6379> set "sex" "man" QUEUED 127.0.0.1:6379> get "name" QUEUED 127.0.0.1:6379> get "sex" QUEUED 127.0.0.1:6379> exec 1) OK 2) OK 3) "cc" 4) "man"
- 最先入队的set命令被放在事务队列的索引0位置
- 第二入队的set命令被放置在事务队列索引1位置
- 第三入队的get命令被放置到事务队列的2位置
- 第四入队的get命令被放置在事务队列的3位置
二.WATCH乐观锁实现
WATCH命令是一个乐观锁,它可以在EXEC命令执行之前,监视任意数量的数据库键,并在EXEC命令执行时,监控被监视的键最少有一个被修改了,如果是,服务器则拒绝执行事务,并向客户端返回代表执行失败的空回复。
三.事务的ACID特性
- 原子性:事务队列中的命令要么全部执行,要么全部不执行。但是Redis不支持事务的回滚,即使在整个队列执行过程中出现错误,整个事务也会执行下去,知道将队列中的所有命令都执行完成。
- 一致性:即在事务执行前数据库是一致的,在执行后也是一致的。
- 隔离性:即使多是事务并发的执行,各个事务之间也不会相互影响,并且在并发状态下执行事务和串行执行事务产生的结果完全相同。
- 耐久性:当一个事务执行完毕时,执行这个事务所得的结果已经被保存到永久性储存介质中,即便事务执行完成后服务器停机,事务的执行结果任然不会丢失。
四.测试事务
命令:
127.0.0.1:6379> MULTI OK 127.0.0.1:6379> set "name" "cc" QUEUED 127.0.0.1:6379> set "sex" "man" QUEUED 127.0.0.1:6379> get "name" QUEUED 127.0.0.1:6379> get "sex" QUEUED 127.0.0.1:6379> exec 1) OK 2) OK 3) "cc" 4) "man"
当在执行multi命令后执行的命令出错,在执行exec的时候就会出错。
127.0.0.1:6379> MULTI OK 127.0.0.1:6379> SELECT "name" "ptm" (error) ERR wrong number of arguments for 'select' command 127.0.0.1:6379> set "name" "ptm" QUEUED 127.0.0.1:6379> get "name" QUEUED 127.0.0.1:6379> set "author" "ps" QUEUED 127.0.0.1:6379> get "author" QUEUED 127.0.0.1:6379> EXEC (error) EXECABORT Transaction discarded because of previous errors.
相关文章推荐
- Redis事务测试
- 五.Redis的多数据库和事务
- Redis-03.事务
- Redis学习手册(事务)
- acl 不支持redis 集群 事务操作
- Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍
- Redis 事务
- 15天玩转redis —— 第八篇 你不得不会的事务玩法
- Java连接Redis数据库 事务、管道和分布式的调用方式
- redis中的事务,连接,生存时间,排序相关
- redis 事务,持久化,日志,主从,VM
- redis中的事务
- Redis进阶-事务管理、消息通知等
- 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)
- redis入门——事务管理01
- Redis中的事务
- 针对多个Redis key使用事务方式同步修改时引发的问题
- Redis进阶实践(三)——redis高级应用(主从、事务与锁、持久化)
- Redis之事务与锁
- springboot中redisTemplate事务开启的两种方式