陪你一起学redis(十)——redis事务

113 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

前言

说到事务,那么经典面试题就来了,事务的四个特性是什么?原子性,隔离性,一致性,持久性。那么redis中事务具备这四个特性吗?下面我们一起来看看。

redis事务的使用

## 开启事务
multi
## 操作新增/更新redis中的key
set y1 111
set y2 222
...
## 提交事务
exec

image.png

## 开启事务
multi
## 操作新增/更新redis中的key
set y3 333
set y4 444
...
## 取消事务
discard

image.png

## 监听key:y3
watch  y3
## 开启事务
multi
## 设置y3的值为333
set y3 333
## 打开另外一个redis的客户端窗口,设置y3的值为444
set y3 444
## 回到第一个redis的客户端窗口,提交事务
exec
## 查看y3的值
get y3

image.png

image.png

redis事务的分析

redis事务,从严格意义上来说只是个批处理,即以multi作为事务开始的标识,在此标识之后,将多个redis命令都放入到一个队列缓存,当执行exec命令时,触发提交,将队列里的多个redis命令依次执行,完成一次事务的过程,并且中间某条命令执行失败,并不会导致这条命令之前的命令进行回滚,也不会造成这条命令之后的命令不执行。例如:

## 查看y3的当前值
get y3
## 开启事务
multi
## 设置y3的值为555
set y3 555
## 将111,333添加到y3列表里
lpush y3 111 333
## 设置y3的值为666
set y3 666
## 提交事务
exec

image.png 从上图可以看到,该事务执行了3条命令,第2条执行失败,但是第1条和第3条都执行成功。

redis事务的场景

redis实现乐观锁: 实现步骤:

  1. 利用redis的watch功能,监控这个redisKey的状态值
  2. 获取redisKey的值
  3. 创建redis事务
  4. 针对这个key做业务逻辑处理
  5. 然后去执行这个事务,如果key的值被修改过则回滚,key不加

结束

需要交流学习可以关注公众号【温故知新之java】,互相学习,一起进步