Redis持久化方式
RDB定时快照方式:RDB将数据库的快照(snapshot)以二进制的方式存储在磁盘中。
AOF基于语句追加文件的方式:以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到AOF文件,以此达到记录数据库状态的目的。
虚拟内存(vm)(被废弃)
Diskstore方式(被废弃)
前两种是基于全部数据都在内存中,即最小数据量下提供磁盘落地功能,而后两种方式是尝试存储数据超过物理内存时,即大数据量的数据存储;实际生产环境用的只有前两种,即Redis目前只能作为小数据量存储(全部数据能够加载在内存中),海量数据存储方面并不是Redis所擅长的领域。
RDB定时快照方式
RDB持久化的触发分为手动触发和自动触发两种。
手动触发
通过redis的save命令和bgsave命令,都可以生成RDB文件。
1.save保存数据到磁盘的方式
Redis Save 命令执行一个同步保存操作,将当前Redis实例的所有数据快照(snapshot)以RDB文件的形式保存到硬盘。
语法:redis 127.0.0.1:6379>SAVE
返回值:保存成功时返回OK
2.BGSAVE保存数据到磁盘的方式
BGSAVE命令执行后立即返回OK,然后Redis fork出一个新子进程,原来的Redis进程继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
客户端也可以通过LASTSAVE命令查看相关信息,判断BGSAVE命令是否执行成功。
save命令整个过程会阻塞服务器,而bgsave只有fork子进程时会阻塞服务器,因此save已基本被废弃。
自动触发
自动触发最常见的情况是在配置文件中通过save m n,指定当m秒内发送n次变化时,会触发bgsave。
AOF基于语言追加方式
AOF方式实际类似mysql的基于语句的binlog方式,即每条会使Redis内存数据发生改变的命令都会追加到一个log文件中,也就是说这个log文件就是Redis的持久化数据。
AOF持久化的触发分为手动触发和自动触发两种。
手动触发
使用bgrewriteaof命令:Redis主进程fork子进程来执行AOF重写,这个子进程创建新的AOF文件来存储重写结果,防止影响旧文件。因为fork采用了写时复制机制,子进程不能访问在其被创建出来之后产生的新数据。
自动触发
和RDB一样,配置在redis.conf文件里:
启动AOF:appendonly yes
关闭AOF:
命令行关闭:config set appendfsync no
配置文件:将appendonly设置为no,默认是appendonly no