redis实战之事务与持久化实战之事务与持久化
编辑推荐编辑推荐:
本文主要介绍了事务描述、 redis事务处理、redis事务示例、redis持久化。
本文来自博客园,由火龙果软件Anna编辑、推荐。
1. 事务描述
(1)什么是事务
事务,就是把一堆事情绑在一起,按顺序的执行,都成功了才算完成,否则恢复之前的样子
事务必须服从ACID原则,ACID原则分别是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性
(durability)
原子性:操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据
进行回滚,回到执行指令前的数据状态
一致性:事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定
隔离性:在该事务执行的过程中,无论发生的任何数据的改变都应该只存在于该事务之中,对外界不存在影响,只有在事务确
认提交之后们才会显示该事务对数据的改变,其他事务才能获取到这些改变后的数据
持久性:当事务正确完成后,它对于数据的改变是永久性的
(2)并发事务导致的常见错误
第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖
脏读:一个事务读取到另一个事务未提交的更新数据
幻读也叫虚读:一个事务执行两次查询,第二次结果集包含第一次中没有或某些行已经被删除的数据,造成两次结果不一致,
只是另一个事务在这两次查询中间插入或删除了数据造成的
不可重复读:一个事务两次读取同一行的数据,结果得到不同状态的结果,中间正好另一个事务更新了该数据,两次结果相
异,不可被信任
第二类丢失更新:是不可重复读的特殊情况。如果两个事物都读取同一行,然后两个都进行写操作,并提交,第一个事物所做
的改变就会丢失
2. redis事务处理
redis事务通过MULTI、WATCH、UNWAYCH、EXEC、DISCARD五个命令实现
MUTIL命令:用于开启一个事务,客户端可以继续向服务器发送任意多条命令,这些命令不会立即被执行,而是被放到一个队
列中,当EXEC命令被调用时,所有队列中的命令才会被执行,它总是返回OK
WATCH命令:对键进行监视,直到用户执行EXEC命令的这段时间里面,如果其他客户端抢先对任何被监视的键进行了替
换、更新或删除等操作,那么当用户舱室执行EXEC命令的时候,事务将失败并返回一个错误(之后用户可以选择重试或者放
弃事务)
UNWATCH命令:在WATCH命令执行之后,EXEC命令执行之前对链接进行重置
EXEC命令:执行事务命令
DISCARD命令:客户端可以取消WATCH命令名清空所有已入队命令
3. redis事务示例
下面将用商品交易示例说明事务处理过程