redis事务

本文详细介绍了Redis事务的功能特性,包括其原子性、隔离性以及如何通过multi、exec等命令实现序列化执行。此外还探讨了乐观锁机制的实现及持久化问题。

redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行

redis事务命令
multi:标志事务的开始。
exec:执行事务命令,命令的回复是一个数组, 数组中的每个元素都是执行事务中的命令所产生的回复。
discard:清空事务队列,退出事务状态。
watch:锁定key值,直到执行了multi或者exec命令。如果监控了某个key值,同时在接下来的事务中对key值有修改,那么执行事务前,其他客户端如果修改了该key值,那么执行事务时会失败。需要生效,则重新执行事务。这个场景的描述就是乐观锁。
exec被调用时, 不管事务是否成功执行, 对所有键的监视都会被取消。
unwatch:去除监控状态。

使用 AOF 方式做持久化的时候, Redis 会使用单个 write 命令将事务写入到磁盘中。然而,如果 Redis 服务器因为某些原因被管理员杀死,或者遇上某种硬件故障,那么可能只有部分事务命令会被成功写入到磁盘中。如果 Redis 在重新启动时发现 AOF 文件出了这样的问题,那么它会退出,并汇报一个错误。使用redis-check-aof程序可以修复这一问题:它会移除 AOF 文件中不完整事务的信息,确保服务器可以顺利启动。

redis事务中只要有一条命令中显示地报错之后,虽然后面的命令也可以入队列,但是最后整个队列的命令都不会执行。这里对string类型使用incr命令,显示报错。

这里写图片描述

而另外一种情况,事务命令输入过程中虽然没报错,但是执行的时候报错,这个时候这条执行出错的命令未执行,其余正常的命令执行生效。下面就是用hash的命令操作string类型的key值。
这里写图片描述

正如前面描述,redis事务执行失败,不会进行回滚,而是继续执行后面的命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值