远程字典服务 — Redis 札记(九:事务)

1、Redis事务本质

一组命令的集合 ! 一个事务中所有命令都会被序列化,在事务执行过程中,语句会按照顺序执行 !

也就是说 Redis的事务 会 一次性、顺序性、排他性的 执行一系列的命令

--- 队列 --> set set update delete --

2、Redis事务中没有隔离级别的概念

所有的命令在事务中,并没有直接被执行,只有发起执行命令的时候才会被执行
也就是说 不存在 脏读、幻读、不可重复读 等等现象…

3、Redis 单条命令是保证原子性的,但是事务却不保证原子性

Redis 的事务 三阶段

开启事务(multi)、命令入队(正常书写命令)、执行事务(exec)

4、Redis 事务命令

命令解释
discard取消事务,放弃执行事务块内的所有命令。
exec执行所有事务块内的命令。
multi标记一个事务块的开始。
unwatch取消 watch 命令对所有 key 的监视。
watch key [key …]监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断

5、测试

一段正常成功的事务


127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set name csnz
QUEUED
127.0.0.1:6379(TX)> set age 18
QUEUED
127.0.0.1:6379(TX)> set sex male
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) OK
3) OK

一段编译型异常的事务(代码有问题,命令有错)事务中 所有的命令都不会被执行

127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set name csnz
QUEUED
127.0.0.1:6379(TX)> set age 18
QUEUED
127.0.0.1:6379(TX)> setsetset sex female
(error) ERR unknown command `setsetset`, with args beginning with: `sex`, `female`, 
127.0.0.1:6379(TX)> get age
QUEUED
127.0.0.1:6379(TX)> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get age
(nil)

一段运行时异常的事务,如果事务队列中存在语法性,那么执行命令的时候,其他命令是可以正常执行的,错误命令抛出异常!

127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set name csnz
QUEUED
127.0.0.1:6379(TX)> incr name
QUEUED
127.0.0.1:6379(TX)> get name
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) (error) ERR value is not an integer or out of range
3) "csnz"
127.0.0.1:6379> get name
"csnz"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值