带你悄悄走进缓存redis的世界(二)


“这是我参与更文挑战的第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/23485.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!