Redis学习--Redis的事务与持久化
一、Redis的事务
Redis的事务与mysql中的事务是不一样的,Redis的事务主要是用来处理线程安全性问题。它的定义为:Redis事务是一个单独的隔离操作,事务中所有的命令都会序列化,按顺序地执行。事务在执行过程中,不会被其他客户端命令打断。
Redis执行命令是一个队列,它会把一堆命令都放在一个队列中然后顺序执行。因此Redis的执行命令有两个状态:第一个是组队状态,就是将要执行的命令组队在一起,如果组队过程中某个命令出错了,那么执行时整个队列命令都会取消;第二个状态是执行状态,如果执行状态中某个命令出错了,则只是出错的命令不会执行,其他的任然会继续执行。
Redis事务的三个特点:
1.单独的隔离操作。
2.没有隔离级别的概念。
3.不保证原子性,这是因为命令出错会继续执行,不会进行回滚。
二、Redis的持久化
1.RDB持久化方式
在指定的时间间隔内将内存中的数据集快照写入磁盘,在进行数据恢复时,将快照文件直接读取到内存中。
RDB的特点:
优点:
a.节省磁盘空间,这是因为RDB的持久化方式是会将当前时间前的数据快照进行清理,因此存储的快照只会是最近几次的。
b.恢复速度快,恢复的数据已经有了只是作一次拷贝,因此速度很快。
缺点:
a.备份快照的方式是根据时间周期进行备份,如果Redis意外的宕机,那么就可能会失去最后一次的快照数据。
b.Redis拷贝快照在数据量庞大时,也是很消耗性能的。
2.AOF的持久化方式
AOF的方式是以日志形式来记录每个写操作的命令。对于存储命令的日志文件来说,Redis只允许对文件进行追加,不能改写。Redis恢复数据就会根据日志中存储的指令进行数据恢复的工作。
需要注意的是:如果AOF和RDB方式同时开启,Redis会选择AOF的方式进行存储文件,这是因为AOF保存的数据更加的完整。
AOF的特点:
优点:
1.AOF文件是一个只进行追加操作的日志文件,对文件写入不需要进行seek,即使在追加的过程中,写入了不完整的命令(例如:磁盘已满),可以使用redis-check-aof工具可以修复这种问题。
2.Redis可以在AOF文件变得过大时,会自动地在后台对AOF进行重写:重写后的新的AOF文件包含了恢复当前数据集所需的最小命令集合。整个重写操作是绝对安全的,因为Redis在创建AOF文件的过程中,会继续将命令追加到现有的AOF文件中,即使在重写的过程中发生宕机,现有的AOF文件也不会丢失。一旦新AOF文件创建完毕,Redis就会从旧的AOF文件切换到新的AOF文件,并对新的AOF文件进行追加操作。
3.AOF文件有序地保存了对数据库执行的所有写入操作。这些写入操作一Redis协议的格式保存,易于对文件进行分析;例如,如果不小心执行了FLUSHALL命令,但只要AOF文件未被重写,通过停止服务器,移除AOF文件末尾的FLUSHALL命令,重启服务器就能达到FLUSHALL执行之前的状态。
缺点:
1.对于相同的数据集来说,AOF文件要比RDB文件大。
2.根据所使用的持久化策略来说,AOF的速度要慢与RDB。一般情况下,每秒同步策略效果较好。不使用同步策略的情况下,AOF与RDB速度一样快。