Redis-事务

redis事务可以一次执行多个命令,是一组命令的集合。一个事务中的所有命令都会被序列化,按顺序的串行执行,执行中不会被其他命令插入,不允许加塞。
常用命令:

MULTI            #标记一个事务块的开始
EXEC 			 #执行所有事务块的命令
DISCARD 		 #放弃执行事务块的所有命令
UNWATCH 		 #取消WATCH命令对所有key的监视
WATCH key [key]  #监视一个或多个key,如果事务执行前这个key被其他命令改动,那么事务将被打断。
Redis 事务中的错误

在 Redis 的事务中命令在加入队列的时候如果出错,那么此次事务是会被取消执行的。这种错误在执行exec 命令前 Redis 服务就可以探测到:
在这里插入图片描述
但是在 Redis 事务中还有一种错误,那就是所有命令都加入队列成功了,但是在执行exec命令的过程中出现了错误,这种错误 Redis 是无法提前探测到的,这种情况下 Redis 的事务是怎么处理的呢?
在这里插入图片描述
上面测试过程中 k1值为 “a”,incr k1 命令执行前无法检测,成功加入队列,Redis 并没有报错。但是最后在执行exec 命令的时候,第一条命令执行失败,报错k1不是整型,无法incr +1,其他的命令执行成功。说明虽然事务失败了但是命令执行的结果并没有回滚。

Redis 为什么不支持事务回滚:
Redis commands can fail only if called with a wrong syntax (and the problem is not detectable during the command queueing), or against keys holding the wrong data type: this means that in practical terms a failing command is the result of a programming errors, and a kind of error that is very likely to be detected during development, and not in production.
Redis is internally simplified and faster because it does not need the ability to roll back.

上面总共提到两点解释:

  • 第一点意思是说在开发环境中就能避免掉语法错误或者类型不匹配的情况,在生产上是不会出现的;
  • 第二点是说 Redis 的内部是简单的快速的,所以不需要支持回滚的能力;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值