Redis中RDB和AOF持久化模式缺陷是什么


这篇文章主要介绍了Redis中RDB和AOF持久化模式缺陷是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、RDB持久化模式缺陷1、问题描述:并发200路,模拟不断写Redis,持续4小时后,接口调用开始出现大量失败,错误信息如下:2、原因分析:解读错误信息,以为是磁盘不够用引起,结果发现磁盘还剩余42%,如下所示:于是根据错误信息提示开启Redis日志,继续压测,接口依然报错,但可从Redis日志信息中Can’t save in background: fork: Cannot allocate memory进程使用内存不当有关,查看Redis主进程占用内存如下:占用近55%*4G内存具体原因:Redis在保存数据到硬盘时为了避免主进程假死,需要Fork一份主进程,然后在Fork进程内完成数据保存到硬盘的操作,如果主进程使用了2.2GB的内存,Fork子进程的时候需要额外的2.2GB,此时内存就不够了,Fork失败,进而数据保存硬盘也失败了。3、缓解方案(不能根本解决问题):3.1 修改redis.conf文件中配置项stop-writes-on-bgsave-error no (默认值为yes),即当bgsave快照操作出错时停止写数据到磁盘,这样后面写错做均会失败,为了不影响后续写操作,故需将该项值改为no3.2 修改内核参数(如下3种方式),但需要root权限:二、AOF持久化模式缺陷1、问题1描述:Redis主从节点均开启AOF模式,并发200路,模拟不断写Redis,持续15分钟后,接口调用开始出现大量失败,且Redis所在的Linux虚拟服务器挂起。接口报错如下:原因分析:从dubbo接口报错信息来看,是由于接口API操作Redis超时导致。从系统日志和IO监控来看,均说明上述问题是由于IO瓶颈(系统IO过于繁忙)所致,如下所示:从系统日志也能看出,IO阻塞时间超过了120秒,由于系统安全机制导致机器挂起。总结测试结果证明AOF模式存在最明显缺陷,即访问压力大时IO会成为性能瓶颈,进而导致服务不可用。3、缓解方案(不能根本解决问题)编辑/etc/sysctl.conf ,添加如下配置:然后sysctl -p 使配置文件生效。问题2描述:免费云主机域名无论采用AOF模式还是RDB(快照模式),当两文件(.aof或.rdb)大小超过系统内存80%,Redis进程会被系统Kill掉,导致服务不可用。上述问题说明我们在使用Redis时需要事先做好系统内存的容量规划,因为一旦Redis宕掉会导致大量数据丢失且是不可恢复的。感谢你能够认真阅读完这篇文章,希望小编分享的“Redis中RDB和AOF持久化模式缺陷是什么”这篇文章对大家有帮助,同时也希望大家多多支持百云,关注百云行业资讯频道,更多相关知识等着你来学习!

相关推荐: 三种工厂模式的C++实现

◆ 1.为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题 n 多的子类继承自抽象基类,我…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/04 10:02
下一篇 01/04 10:02