写点什么

缓存的世界 Redis(二)- 持久化

用户头像
卢卡多多
关注
发布于: 2021 年 06 月 16 日
缓存的世界 Redis(二)-持久化

这期我们继续接着聊关于 Redis 持久化,和数据备份的方案,

6.Redis 如何实现内存数据压缩,数据清理:

因为内存中的数据,再每次进行 iO 操作的时候,进行数据交换,数据也会随之增加,从而开始,比如


Redis 数据结构中 String 数据类型,量级别都在增加数据,等增加到一个阈值之后,通过 Redis 的 LRU,(淘汰机制的算法),去淘汰一部分数据,或者说是 AOF 中持久化写操作文件,达到一个数量级,也会进行重新的 rewrite 方法

7.如何配置 Redis 的持久化:

先找到当前的 Redis 的配置文件,一般是 Redis.conf

(1)配置 RDB:

配置数据的一般是基于时间配置的,比如


save 60 1000


每隔 60 秒,10000 个 key 发生变化,生成一个 dump.rdb 的快照文件 ,这个操作被称为 snap 时候听听,


快照也可以调用 save 或者 bgsave 命令,同步或者异步执行 RDB 的生成


其实 save 也可以生成多个,设置多个检查点:


默认的SNAPSHOTTING
save 900 1save 300 10save 60 10000
save 保存导出一个rdb文件,基于多个连接点和数据校验,key的变化达到这个设置的数据之后,就可以使用了
复制代码


Redis 关机的模式:


【1】如果 Redis-cli shutdown ,表示一个 Redis 的安全退出模式,Redis 会创建一个 RDB 的快照文件,再次启动 Redis,


Redis-cli
get k1 数据还是存在的
复制代码


【2】如果 Redis 的进行被恶意直接杀死,kill -9 杀掉进程


kill -9  PID//在进程活动监视器上可以找到//此命令是强制关闭 当前的PID的进程
复制代码


但是再起启动 Redis ,数据不存在


​ 直接杀死进程不会保存数据


【3】手动可以设置一个 save 的检查点,比如 save 5 1


写入部分数据,等待 5 秒之后,dump 的 rdb 文件可以找到快照数据


这时候要是直接杀死进程,恢复 Redis 之后,数据还是会存在的


表示, 当只要经过 rDB 保存的数据节点时间,redis 异常退出,重新进入,数据还是会存在的

(2)配置 AOF:

默认是 aof 是关闭的状态,


在配置文件中,形式为 appendonly no


 appendonly yes  //代表AOF的持久化机制已经打开
复制代码


AOF:每次 Redis 要进行写操作,就会放入 AOF 的文件,当然是先写入 os cache 中,然后每次 fsync 数据之后写入磁盘


要是在备份过程中,AOF 文件和 RDB 的文件都存在,优先会加载 AOF 的配置文件,(因为是基于写操作的日志文件,文件完整性比较高,利于首先构建数据)


配置 AOF 的 fsync 的策略,比如


  • 每次写入一条数据就执行一次 fsync

  • 每隔一秒执行一次 fsync;

  • 一种是不主动执行的 fsync:


如果说是总是 always:每次写入一条数据,立即将这个数据对应的写日志放到 fsync 到磁盘上去,性能非常非常差,吞吐量很低;


生产环境:


​ 配置的参数


always:每次写入一条数据,立即将这个数据对应的写日志放到 fsync 到磁盘上去,性能非常非常差,吞吐量很低;


everysec:每秒执行一次 fsync 的操作,将 os cache 的数据放到数据磁盘上去;


no: 仅仅是负责数据写入 os cache 就撒手不管了,然后后面自己数据写入磁盘的就不可控了


appendfsync   everysec  :默认生产上可以这么做, qps可以达到上万
复制代码


Redis 异常关机,数据能否直接保存?


Redis 数据每次写操作会执行进 AOF 的数据文件中,当文件一秒钟 fsync 之后,放入磁盘才是安全的


但是就算是杀进程的时间,也会将数据直接存储到 AOF 的备份文件中去;


注意事项:

1. AOF 文件一直增加之后,数据文件如何保持数据文件完整?

数据过大,生成的文件也会随之增加, 所以要进行一个消除扩容,相当于 copyandwrite 的操作, 也就是 rewrite 的操作


这个操作 rewrite 的操作,会更新新的操作日志,完成之后会删除旧的日志,保存 Redis 的内存数据量一致;

2.Redis 中可以配置 rewrite 的策略:
auto-aof-rewrite-percentage  100
auto-aof-rewrite-min-size 64mb

//上一次aof的文件最小是64mB,如果发现增长的比例达到之前的100%,也就是现在的两倍,就会重写
复制代码


AOF 操作一次的细节过程:


  • Redis 先 fork 一个子进程,会创建一个 aof 的日志

  • 根据 Redis 客户端继续存储 aof 文件,直接写入新的文件,等到新的文件写入成功之后

  • 会删除旧版本的 AOF 文件


基于持久化操作都是磁盘的;

8.Redis 持久化企业级中的数据备份和容灾:

RDB 做数据备份,每次生成之后,就不会再有修改了


数据备份方案:写 crontab 定时调度脚本去做数据备份


小时级:每小时都 copy 一份 rdb 的备份,到一个目录中去,仅仅保留最近 48 小时的备份日级:每天都保留一份当日的 rdb 的备份,到一个目录中去,仅仅保留最近 1 个月的备份每天晚上将当前服务器上所有的数据备份,发送一份到远程的云服务上去每次 copy 备份的时候,都把太旧的备份给删了

9.Redis 的读写分离来承载读请求 QPS 超过 10 万+:

一般使用在电商系统中,订单系统中事务要求的,只要是 QPS 上万,


底层的 Redis 必须可以支撑高并发,(架构,主从架构,读写分离,分库分表,中间件),用户是一个数量级的;


因为是高并发,然后进行分流,主从和读写分离,水平扩容 Redis slave 提高读性能提高:一秒二十万左右

总结

对于持久化操作,是 Redis 比较重要的特点,主要体现在数据的访问,数据恢复以及丢失找回的场景中,下期我们关于 Redis 的集群,对于 Redis 缓存中雪崩,穿透进行深入的学习。


我是卢卡,做一个早睡的人,晚安啦,

发布于: 2021 年 06 月 16 日阅读数: 10
用户头像

卢卡多多

关注

还未添加个人签名 2020.04.12 加入

还未添加个人简介

评论

发布
暂无评论
缓存的世界 Redis(二)-持久化