Part_three:Redis持久化存储
redis持久化存储
Redis
是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis
提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失。
1.RDB持久化
-
redis提供了RDB持久化的功能,这个功能可以将redis在内存中的状态数据保存到磁盘
-
触发机制:
- 手动执行save命令
- 或者配置触发条件
-
配置文件:s21_rdb.conf
- 配置核心参数:
- dbfilename s21redis.rdb
- save 900 1
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 #定义持久化文件存储位置/data/6379 dbfilename s21redis.rdb #rdb持久化文件s21redis.rdb bind 127.0.0.1 #redis绑定地址 #save 900 1 # #save 200 10 #在200秒中内,超过10个修改类的操作 save 20 2 #
- 创建文件夹 data/6379
[root@xujunk s21redis]#mkdir -p /data/6379/
- 开启redis-server
[root@xujunk s21redis]#redis-server s21_rdb.conf 查看启动状态: [root@xujunk s21redis]#ps -ef |grep redis """ root 22057 1 0 17:14 ? 00:00:00 redis-server 127.0.0.1:6379 """
- 启动redis-cli端,并进行操作
[root@xujunk redis-4.0.10]#redis-cli #咱们设置save 为20秒内 操作2次。所以这里最少操作2次 [root@xujunk redis-4.0.10]#set name haha [root@xujunk redis-4.0.10]#set name2 haha
- 查看存储为位置:
[root@xujunk s21redis]#ls /data/6379 redis.log s21redis.rdb #此时生成2个文件。
- 杀死所有redis
pkill -9 redis
- 再次进入redis
[root@xujunk s21redis]#redis-server s21_rdb.conf [root@xujunk s21redis]#redis-cli 127.0.0.1:6379> keys * 1) "name2" 2) "name3" #此时数据达到持久化存储
- 配置核心参数:
2.第二个机制:AOF机制
-
AOF机制,将你的修改类操作命令,追加到日志文件中
- 记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集
-
AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾,追加文件方式。
- 优点:最大程序保证数据不丢,RDB在没有触发save机制之前就宕机了,那么数据就没了。
- 缺点:日志记录非常大
-
追加文件:用在文件末尾追加记录的方式,对Redis写入的数据,依次进行持久化,所以它的持久化是更加安全的。
-
此外,它还提供一个用appendfsync选项设置fsync的策略,确保写入的数据都落到磁盘中,具体选项包括always,everysec,no等。
-
修改aof 配置文件添加如下参数 ,核心功能参数是:
appendonly yes appendfsync always 总是修改类的操作 everysec 每秒做一次持久化 no 依赖于系统自带的缓存大小机制
-
AOF存储示例
-
创建配置文件并且编辑配置:
[root@xujunk s21redis]#touch s21_aof.conf [root@xujunk s21redis]#vim s21_aof.conf daemonize yes port 6379 dir /data/6379 appendonly yes appendfsync everysec logfile /data/6379/redis.log
-
以自己配置文件 启动redis
[root@xujunk 6379]#redis-server /opt/s21redis/s21_aof.conf [root@xujunk 6379]#ls appendonly.aof redis.log #此时6379目录生成2个文件。实时存储 #实时监控存储数据文件 [root@xujunk 6379]#tail -f appendonly.aof #另起一个窗口启动客户端,操作redis [root@xujunk s21redis]#redis-cli 127.0.0.1:6379> set name "www" OK #监控客户端实时输出存入结果: *2 $6 SELECT $1 0 *3 $3 set $4 name $3 www
-
-
redis 持久化方式有哪些?有什么区别?
rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能 aof:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog
3.redis持久化rdb切换aof备份
-
本文在redis4.0中,通过config set命令,达到不重启redis服务,从RDB持久化切换为AOF
-
查看redis版本
[root@xujunk s21redis]#redis-server -v Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=f4e8cdb9b08f1cb0
-
rdb模式下的redis持久化,不重启切换为 aof模式
-
手动操作:
redis内切换: config set appendonly yes config set save ""
-
环境准备:更改s21_rdb.conf配置
#准备rdb配置文件 daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 #定义持久化文件存储位置/data/6379 #dbfilename s21redis.rdb #rdb持久化文件s21redis.rdb bind 127.0.0.1 #redis绑定地址 #save 900 1 # #save 200 10 #在200秒中内,超过10个修改类的操作 save 20 2 appendonly yes appendfsync always
-
删除rdb保存文件
[root@xujunk 6379]#rm -rf dump.rdb
-
重启redis server端部
[root@xujunk 6379]#redis-server /opt/s21redis/s21_rdb.conf
-
启动客户端
[root@xujunk 6379]#redis-cli 127.0.0.1:6379> keys * 1) "name" #在没有重启redis-server端实现RDB---->AOF(切换)
-
注意想要永久切换为aof,还得修改配置文件方可
-