redis多被用于缓存和消息中间件,当被用做缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,redis为咱们提供两种数据持久化存储方式:RDB,AOF。redis
RDB持久化是按配置文件中指定的时间间隔,每隔一段时间将当前进程生成数据保存到硬盘名为xx.rdb的二进制文件中。咱们也能够手动使用save或者bgsave命令,将新生成的数据手动保存到硬盘的xx.rdb二进制文件中。数据库
save命令:使用save命令要注意,它会阻塞当前redis服务器,直到RDB将数据所有保存到xx.rdb文件中为止,若是是线上环境不建议使用该命令。vim
使用save命令RDB存储过程以下:缓存
bgsave命令:redis进程会建立一个子进程,RDB的存储过程是由子进程来负责完成的,完成后自动退出子进程,阻塞只发生在建立子进程这个阶段,所以时间很短,不会影响主进程。服务器
使用save命令RDB存储过程以下:app
AOF(append only file 仅追加模式):它是以写日志的方式,将每次写命令追加到xx.aof文件中,当设备断电或重启时,redis server会执行xx.aof文件中记录的命令,经过此种方式实现恢复数据的目的。async
AOF持久化存储过程以下:性能
一、全部写入命令会追加到aof_buf的缓冲区中。
二、AOF根据配置文件中的策略向硬盘的xx.aof文件中追加命令。spa
对比RDB和AOF操作系统
一、RDB是以二进制的方式将数据保存到文件中,AOF是以文本的形式将数据保存在文件中,所以AOF生成的文件会比RDB生成的文件要大的多。
二、RDB是redis server经过子进程来执行持久化存储的,而且RDB是以全量的方式进行保存,所以执行RDB的时间间隔不宜太频繁,不然会影响性能,这样便存在一个空档期,当在这个空档期发生断电或者系统重启时会出现丢失数据的状况。AOF当有写入时,将写入的命令记录到xx.aof文件中,所以它能更好的保证数据不丢失。
三、数据恢复:RDB的方式redis server直接读取xx.rdb文件到内存中,AOF的方式redis server读取xx.aof文件,经过执行文件中的命令的方式来实现数据恢复,所以它的数据恢复速度相比于RDB的方式要慢。
因为是演示,这里的配置文件也就进行了简单设置,个人配置文件内容以下:
# 安装redis [root@zabbix-server ~]# wget -P /opt/source/ http://download.redis.io/releases/redis-5.0.4.tar.gz [root@zabbix-server ~]# tar -zxvf /opt/source/redis-5.0.4.tar.gz -C /opt/ [root@zabbix-server ~]# cd /opt/redis-5.0.4/ [root@zabbix-server redis-5.0.4]# make && make install //默认在/usr/local/bin因此就不用咱们设置环境变量了 # 建立工做目录 [root@zabbix-server ~]# mkdir /opt/redis-5.0.4/redis_config/ # 存放配置文件的目录 [root@zabbix-server ~]# mkdir /opt/redis-5.0.4/data/ # 日志,RDB,AOF等数据的存储目录 # 自定义配置文件 [root@zabbix-server ~]# vim /opt/redis-5.0.4/redis_config/rdb_config.conf bind 192.168.10.100 # 本机地址 port 9000 # 绑定端口 daemonize yes # 后台运行 dir /opt/redis-5.0.4/data/ # redis数据存放的目录 dbfilename rdb_data.rdb # RDB文件的名字 # 格式是:save <seconds> <changes> ,含义是在 seconds 秒以后至少有 changes个keys 发生改变则保存一次 save 900 1 # 900秒后若是有一个KEY发生了变化触发RDB save 300 10 save 60 10000
验证配置
运行redis服务
[root@zabbix-server ~]# redis-server /opt/redis-5.0.4/redis_config/rdb_config.conf
若是服务运行成功你会看到以下:
登陆redis数据库,并写入数据。
[root@zabbix-server ~]# redis-cli -h 192.168.10.100 -p 9000 # 登陆redis 192.168.10.100:9000> ping # 检测链接 PONG 192.168.10.100:9000> set name XiaoMing # 向数据库中添加数据 OK 192.168.10.100:9000> set age 12 OK 192.168.10.100:9000> keys * # 查看添加后的数据 1) "age" 2) "name" 192.168.10.100:9000> get name "XiaoMing" 192.168.10.100:9000> get age "12" 192.168.10.100:9000> save # 手动触发RDB OK 192.168.10.100:9000>
使用kill结束redis server
[root@zabbix-server ~]# kill -9 redis server的PID
若是执行成功你会看到以下:
验证 一: 到/opt/redis-5.0.4/data/目录下查看是否生成了rdb_data.rdb 文件
验证 二:从新运行redis server服务,验证数据是否丢失
到此RDB持久化存储就简单介绍到这里,关于RDB持久化存储须要注意的就是配置文件中的save那个选项。
[root@zabbix-server ~]# vim /opt/redis-5.0.4/redis_config/rdb_config.conf bind 192.168.10.100 # 本机地址 port 9000 # 绑定端口 daemonize yes # 后台运行 dir /opt/redis-5.0.4/data/ # redis数据存放的目录 dbfilename rdb_data.rdb # RDB文件的名字 # 格式是:save <seconds> <changes> ,含义是在 seconds 秒以后至少有 changes个keys 发生改变则保存一次,这个是redis默认给的值,咱们能够根据具体实际状况自行调整 save 900 1 # 900秒后若是有一个KEY发生了变化触发RDB save 300 10 save 60 10000
个人配置文件内如以下:
[root@zabbix-server ~]# vim /opt/redis-5.0.4/redis_config/aof_config.conf bind 192.168.10.100 # 绑定IP地址 port 9001 # 绑定端口 daemonize yes dir /opt/redis-5.0.4/data/ # redis 的工做目录 appendfilename aof_data.aof # AOF文件的名字 appendonly yes # 启用AOF持久化存储 appendfsync everysec # 可选值always、everysec和no # 设置为always时,每次收到命令写入时,都会调用fsync(Linux为调用fdatasync)强制将数据写入到硬盘的xx.aof文件中, # 此时会出现阻塞直到数据被彻底同步到硬盘的xx.aof中,该模式下能够很好的保证数据不被丢失,但会严重影响redis服务器的性能,不多用。 # 设置为everysec时,每次收到命令写入时,先调用系统write将数据写入到系统缓冲区中,由单独的线程每秒调用一次fsync(Linux为调用fdatasync)将数据同步到xx.aof文件中, # 若是系统在线程尚未调用fsync时会出现数据丢失,推荐使用该模式,该模式是在性能和存储上选用折中的方式,推荐使用。 # 设置为no时,每次收到命令写入时,先调用系统write将数据写入到系统缓冲区中,后由操做系统负责将缓冲区中的数据写入到xx.aof文件中, # 这个周期是在30秒之内,该模式是性能最好,可是不能很好的保证数据不被丢失,不推荐使用。 # AOF是向xx.aof文件追加写命令,所以文件会愈来愈大,而且有可能会有重复的命令,所以须要对xx.aof文件进行重写去掉重复的命令,来减少文件的体积。 auto-aof-rewrite-min-size 64mb # AOF文件初始最小值 auto-aof-rewrite-percentage 100 # 当前AOF文件大小是上一次重写后的AOF文件大小的2倍后,进行重写
启动redis 服务
[root@zabbix-server ~]# redis-server /opt/redis-5.0.4/redis_config/aof_config.conf
登陆redis写入数据
[root@zabbix-server ~]# redis-cli -h 192.168.10.100 -p 9001 # 登陆redis 192.168.10.100:9001> ping # 查看连接状态 PONG 192.168.10.100:9001> keys * # 查看数据库中的键 (empty list or set) 192.168.10.100:9001> set test HelloWorld # 添加数据 OK 192.168.10.100:9001> set damo HaHaHa OK 192.168.10.100:9001> keys * # 查看添加后的数据 1) "test" 2) "damo" 192.168.10.100:9001> get test "HelloWorld" 192.168.10.100:9001> get damo "HaHaHa" 192.168.10.100:9001>
结束redis服务
[root@zabbix-server ~]# kill -9 AOF的进程PID # 杀掉AOF的redis服务
执行完成后你会看到以下:
验证 一:在/opt/redis-5.0.4/data/下查看是否存在aof_data.aof
验证 二:登陆数据库查看数据是否丢失
启动redis服务
[root@zabbix-server ~]# redis-server /opt/redis-5.0.4/redis_config/aof_config.conf
登陆数据库查看结果
到此redis持久化存储就简单介绍到这里,关于AOF还有不少配置选项这里就不一一列举了,感兴趣的朋友能够查看配置文件根据具体状况了解更多内容。