全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Redis优化经验总结(必看篇)

内存管理优化

Redis Hash是value内部为一个HashMap,如果该Map的成员数比较少,则会采用类似一维线性的紧凑格式来存储该Map, 即省去了大量指针的内存开销,这个参数控制对应在redis.conf配置文件中下面2项:

hash-max-zipmap-entries 64 hash-max-zipmap-value 512       

当value这个Map内部不超过多少个成员时会采用线性紧凑格式存储,默认是64,即value内部有64个以下的成员就是使用线性紧凑存储,超过该值自动转成真正的HashMap。

hash-max-zipmap-value 含义是当 value这个Map内部的每个成员值长度不超过多少字节就会采用线性紧凑存储来节省空间。

以上2个条件任意一个条件超过设置值都会转换成真正的HashMap,也就不会再节省内存了,那么这个值是不是设置的越大越好呢,答案当然是否定的,HashMap的优势就是查找和操作的时间复杂度都是O(1)的,而放弃Hash采用一维存储则是O(n)的时间复杂度,如果

成员数量很少,则影响不大,否则会严重影响性能,所以要权衡好这个值的设置,总体上还是最根本的时间成本和空间成本上的权衡。

list-max-ziplist-value 64 list-max-ziplist-entries 512       

list数据类型节点值大小小于多少字节会采用紧凑存储格式、list数据类型多少节点以下会采用去指针的紧凑存储格式。

内存预分配:

Redis内部实现没有对内存分配方面做过多的优化(对比Memcache),在一定程度上会存在内存碎片,不过大多数情况下这个不会成为Redis的性能瓶颈,不过如果在Redis内部存储的大部分数据是数值型的话,Redis内部采用了一个shared integer的 方式来省去分配内存的开销,即在系统启动时先分配一个从1~n 那么多个数值对象放在一个池子中,如果存储的数据恰好是这个数值范围内的数据,则直接从池子里取出该对象,并且通过引用计数的方式来共享,这样在系统存储 了大量数值下,也能一定程度上节省内存并且提高性能,这个参数值n的设置需要修改源代码中的一行宏定义REDIS_SHARED_INTEGERS,该值 默认是10000,可以根据自己的需要进行修改,修改后重新编译就可以了。

持久化机制:

定时快照方式(snapshot):

该持久化方式实际是在Redis内部一个定时器事件,每隔固定时间去检查当前数据发生的改变次数与时间是否满足配置的持久化触发的条件,如果满足则通 过操作系统fork调用来创建出一个子进程,这个子进程默认会与父进程共享相同的地址空间,这时就可以通过子进程来遍历整个内存来进行存储操作,而主进程 则仍然可以提供服务,当有写入时由操作系统按照内存页(page)为单位来进行copy-on-write保证父子进程之间不会互相影响。

该持久化的主要缺点是定时快照只是代表一段时间内的内存映像,所以系统重启会丢失上次快照与重启之间所有的数据。

基于语句追加方式(aof):

aof方式实际类似mysql的基于语句的binlog方式,即每条会使Redis内存数据发生改变的命令都会追加到一个log文件中,也就是说这个log文件就是Redis的持久化数据。

aof的方式的主要缺点是追加log文件可能导致体积过大,当系统重启恢复数据时如果是aof的方式则加载数据会非常慢,几十G的数据可能需要几小时才能加载完,当然这个耗时并不是因为磁盘文件读取速度慢,而是由于读取的所有命令都要在内存中执行一遍。另外由于每条命令都要写log,所以使用aof的方式,Redis的读写性能也会有所下降。

可以考虑将数据保存到不同的Redis实例中,每个实例的内存大小在2G左右,避免将鸡蛋放到一个篮子里,既可以减少缓存失效给系统带来的影响,又可以加快数据恢复的速度,不过同时也给系统设计带来了一定的复杂性。

Redis持久化崩溃问题:

有Redis线上运维经验的人会发现Redis在物理内存使用比较多,但还没有超过实际物理内存总容量时就会发生不稳定甚至崩溃的 问题,有人认为是基于快照方式持久化的fork系统调用造成内存占用加倍而导致的,这种观点是不准确的,因为fork 调用的copy-on-write机制是基于操作系统页这个单位的,也就是只有有写入的脏页会被复制,但是一般你的系统不会在短时间内所有的页都发生了写 入而导致复制,那么是什么原因导致Redis崩溃的呢?

答案是Redis的持久化使用了Buffer IO造 成的,所谓Buffer IO是指Redis对持久化文件的写入和读取操作都会使用物理内存的Page Cache,而大多数数据库系统会使用Direct IO来绕过这层Page Cache并自行维护一个数据的Cache,而当Redis的持久化文件过大(尤其是快照文件),并对其进行读写时,磁盘文件中的数据都会被加载到物理内 存中作为操作系统对该文件的一层Cache,而这层Cache的数据与Redis内存中管理的数据实际是重复存储的,虽然内核在物理内存紧张时会做 Page Cache的剔除工作,但内核很可能认为某块Page Cache更重要,而让你的进程开始Swap ,这时你的系统就会开始出现不稳定或者崩溃了。我们的经验是当你的Redis物理内存使用超过内存总容量的3/5时就会开始比较危险了。

总结:

1、根据业务需要选择合适的数据类型,并为不同的应用场景设置相应的紧凑存储参数。

2、当业务场景不需要数据持久化时,关闭所有的持久化方式可以获得最佳的性能以及最大的内存使用量。

3、如果需要使用持久化,根据是否可以容忍重启丢失部分数据在快照方式与语句追加方式之间选择其一,不要使用虚拟内存以及diskstore方式。

4、不要让你的Redis所在机器物理内存使用超过实际内存总量的3/5。

redis.conf中的maxmemory选项,该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致swap,最终严重影响性能甚至崩溃。

redis.conf文件中 vm-enabled 为 no

以上这篇Redis优化经验总结(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# redis优化  # 生产redisson延时队列不消费问题排查解决  # 一次关于Redis内存诡异增长的排查过程实战记录  # redis性能优化之生产中实际遇到的问题及排查总结  # 重启  # 操作系统  # 就会  # 时间内  # 给大家  # 加载  # 不超过  # 时就  # 使用了  # 过大  # 不稳定  # 则会  # 每条  # 就可以  # 自己的  # 这层  # 都是  # 总容量  # 是在  # 很好 


相关文章: 如何注册花生壳免费域名并搭建个人网站?  招贴海报怎么做,什么是海报招贴?  如何用VPS主机快速搭建个人网站?  济南网站制作的价格,历城一职专官方网站?  如何自定义建站之星网站的导航菜单样式?  如何在万网开始建站?分步指南解析  如何基于云服务器快速搭建网站及云盘系统?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  建站主机选购指南:核心配置与性价比推荐解析  黑客如何通过漏洞一步步攻陷网站服务器?  Android自定义控件实现温度旋转按钮效果  建站之星CMS五站合一模板配置与SEO优化指南  如何在Golang中引入测试模块_Golang测试包导入与使用实践  沈阳制作网站公司排名,沈阳装饰协会官方网站?  制作网站怎么制作,*游戏网站怎么搭建?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  如何在阿里云部署织梦网站?  ,交易猫的商品怎么发布到网站上去?  建站之星后台管理系统如何操作?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  如何快速选择适合个人网站的云服务器配置?  如何快速登录WAP自助建站平台?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  深圳网站制作培训,深圳哪些招聘网站比较好?  ,制作一个手机app网站要多少钱?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  宝塔面板创建网站无法访问?如何快速排查修复?  魔方云NAT建站如何实现端口转发?  如何零基础开发自助建站系统?完整教程解析  如何基于云服务器快速搭建个人网站?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  宝塔建站后网页无法访问如何解决?  如何在建站之星网店版论坛获取技术支持?  宝塔Windows建站如何避免显示默认IIS页面?  建站之星后台管理如何实现高效配置?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何登录建站主机?访问步骤全解析  郑州企业网站制作公司,郑州招聘网站有哪些?  ,网站推广常用方法?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  如何通过多用户协作模板快速搭建高效企业网站?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  建站之星北京办公室:智能建站系统与小程序生成方案解析  Android自定义listview布局实现上拉加载下拉刷新功能  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  如何高效搭建专业期货交易平台网站?  如何通过wdcp面板快速创建网站?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  如何构建满足综合性能需求的优质建站方案? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。