六、Redis事务
-
Redis事务是一个单独的隔离操作,事务中所有的命令都会序列化按照顺序的执行,事务在执行过程中,不会被其他客户端发送来的命令请求所打断。
-
Redis事务的主要作用就是串联多个命令防止其他的命令插队。
1) 命令
-
Multi 组队,Exec 执行, discard 取消
组队阶段出现错误,整个事务的语句都执行失败,组队期间没有出现错误,执行期间出现错误,出现错误的语句执行失败,其他语句执行成功。
2)悲观锁,乐观锁
-
悲观锁:一个线程操作数据时对数据上锁,其他线程无法读取,操作数据,多应用于传统的关系型数据库里面。
-
乐观锁:去拿数据的时候不会上锁,更新数据时会根据数据的版本号判断一个在此期间是否有程序修改过数据,如果修改过不执行。 应用于多读的应用类型。
3) WATCH 命令 UNWATCH 解除乐观锁,,解除时解除所有的乐观锁。
在执行multi之前,先执行watch key1 key2 ,可以监视一个或多个key,如果事务在执行之前这些key被其他命令修改过,那么事务被打断。watch命令之后,只有数据发送改变就执行失败。
4)特性
-
单独的隔离操作 事务中的所有命令都会序列化,按顺序地执行,事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
-
没有隔离级别的概念
-
不保证原子性 Redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚。
七、 Redis 持久化
1)RDB(Redis DataBase)
在指定时间间隔内将内存中的数据集快照写入磁盘,也就是行话将的Snapshot快照,它恢复时是将快照文件直接读到内存里。
优点:1,节省磁盘空间 2,恢复速度快
缺点:1,虽然redis在fork时使用了写时拷贝技术,但是如果数据量庞大时还是比较 消耗性能。 2,在备份周期内一定间隔时间做一次备份,所以,如果Redis意外down掉的话,就是丢失最后一次快照后的所有修改。
2)AOF(Append Of File)
以日志的形式来记录每一个写操作
优点:1, 备份机制更稳健,丢失数据概率更低。2,可读的日志文本,通过操作AOF稳健,可以处理误操作。
缺点: 1,比起RDB占用更多的磁盘空间。2, 每次读写都同步的话,有一定的性能压力。3, 恢复备份速度要慢。 4, 存在个别Bug,造成恢复不能。