设为首页 收藏本站
查看: 713|回复: 0

[经验分享] Redis优化

[复制链接]

尚未签到

发表于 2016-12-17 09:35:05 | 显示全部楼层 |阅读模式
redis公认内存管理成本比较高,即占用了过多的内存,redis的作者对这点也很清楚,所以提供了一系列的参数和手段来控制和节省内存:
1.首先最重要的一点是不要开启redis的vm选项,即虚拟内存功能。这个本来是作为redis存储超出物理内存数据的一种数据在内存与磁盘换入换出的一个持久化策略,但是其内存管理成本也很高,并且我们后续会分析此种持久化策略并不成熟,所以关闭vm功能,所以请设置redis.conf文件中 的vm-enabled 为no。

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

3.另外redis为不同数据类型分别提供了一组参数来控制内存使用,我们前面详细分析过redis hash是value内部为一个hashmap,如果该map 的成员比较少,则会采用类似一维线性的紧凑格式来存储该map,即省去了大量指针的内存开销,这个从拿书控制对应在redis.conf配置文件中下面两项:
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
hash-max-zipmap-entres

含义是当value这个map内部不超过多少成员时会采用线性紧凑格式存储,默认是64,即 alue内部有64个以下的成员就是使用线性紧凑存储,超过该值就自动转成真正的hashMap。
hash-max-zipmap-value 含义是当alue 这个map内部的每个成员值长度不超过多少字节就会采用线性紧凑存储来节省空间。
以上两个条件,任意一条超过设置就会转成真正的hashmap,也就不会再节省内存了,那么这个值是不是设置的越大越好呢。答案当然是否定的,hashmap的优势就是查找和操作的时间复杂度都是o(1)的,而放弃hash采用一维存储则是o(n)的时间复杂度,如果成员数量很少,则影响不大,否则严重影响性能,所以要权衡这个值的设置。总体上是最根本的时间成本和空间成本上的权衡。

同类参数还有:
list-max-ziplist-entries 512
说明:list数据类型多少节点以下会采用去指针的紧凑存储格式。

list-max-ziplist-value 64
说明:list数据类型节点值大小系哦啊与多少字节会采用紧凑存储格式。
set-max-inset-entries 512
说明set数据类型内部数据如果全部是数值型,且包含多少字节点以下,会采用紧凑存储格式。

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-315404-1-1.html 上篇帖子: 命令行安装Redis 下篇帖子: redis 参数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表