Redis之事务操作
1.Redis事务的概念:
Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。
总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
2.事务的四大特性(ACID)
- 原子性(Atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性(Correspondence):在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
- 隔离性(Isolation):隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆, 必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。
- 持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
3.Redis事务注意事项:
- Redis事务没有隔离级别的概念:批量操作在发送Exec命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的跟新,事务外查询不能看到。
- Redis不保证原子性:Reids中,单条命令式原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍然会被执行。
3-1.Redis为什么不支持回滚?
Redis已经在系统内部进行了功能简化,这样可以确保更快的运行速度,因为Redis不需要事务回滚的能力。
4.Redis事务三个阶段
- 开始事务——multi
- 命令入队——在此块中可以写事务中要执行的命令
- 执行事务——exec
5.Redis事务相关命令
- watch key1 key2 keyn …:监视一个或者多个Key,如果过在事务执行之前,被监视的key会被其他命令改动,则事务被打断(类似了乐观锁)。
- multi:执行一个事务快的开始
- exec:执行所有事务快的命令(一旦执行exec后,之前加的监控所都会被取消掉)。
- discard:取消事务,放弃事务中的命令。
- unwatch:去下watch对key的监控。
6.Redis使用案例:
(1)正常执行
(2)放弃事务
(3)当事务执行失败,所有数据都不执行。首先我们要对数据进行监听才能保证数据是否被修改或者是否能正常执行。