★
“这是我参与更文挑战的第7天“
”
这期我们继续接着聊关于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 1
save 300 10
save 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缓存中雪崩,穿透进行深入的学习。
我是卢卡,做一个早睡的人,晚安啦,
原文始发于微信公众号(卢卡多多):带你悄悄走进缓存redis的世界(二)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/28518.html