Redis内存使用和管理.docx

上传人:lao****ou 文档编号:406499 上传时间:2023-10-25 格式:DOCX 页数:6 大小:18.61KB
下载 相关 举报
Redis内存使用和管理.docx_第1页
第1页 / 共6页
Redis内存使用和管理.docx_第2页
第2页 / 共6页
Redis内存使用和管理.docx_第3页
第3页 / 共6页
Redis内存使用和管理.docx_第4页
第4页 / 共6页
Redis内存使用和管理.docx_第5页
第5页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Redis内存使用和管理.docx》由会员分享,可在线阅读,更多相关《Redis内存使用和管理.docx(6页珍藏版)》请在第一文库网上搜索。

1、Redis内存使用和管理原理分析【摘要】本文从RediS数据库最关键的特性一内存出发,详细介绍了Redis的内存使用和内存管理,而这也是成为一名专业Redis运维人员的核心技能。Rec1iS是当今很火爆的内存数据库,我们的所有数据都存在了内存之中,因此我们的每次写入、读取都是从内存中进行操作,所以在带来速度的同时,也从内存的使用上给我们带来了挑战。众所周知,在硬件资源中内存价格是高于硬盘价格的,通过学习RediS的内存知识可以使我们在保护RediS数据库的同时更高效的发挥出RediS的作用,进而管理内存,减少内存消耗和硬件成本。RediS作为内存数据库,对于自身所使用的内存情况是有命令可以统计

2、的,通过获取到的相关信息可以了解RediS自身内存的使用现状,进而有助于判断内存使用健康度。RediS提供查看内存的指令为infomemoryo(点击图片可放大II)在以上各项指标中需要重点关注的指标有:used_memory_rss和used_memory以及它们的比值mem_fragmentation_ratio。当mem_fragmentation_ratio1时,说明used_memory_rss-used_memory多出的部分内存并没有用于数据存储,而是被内存碎片所消耗,这个值越大,表明内存碎片越多。当Inen1fragmentatiOnJratiO1时,这种情况说明正在使用虚拟内

3、存,也就是在使用主机的硬盘,由于硬盘性能是远远低于内存的,所以要小心因为性能问题导致整体Redis故障。根据日常使用的情况mem_fragmentation_ratio的数值在1、1.5之间是比较健康的。在出现内存碎片过多的问题怎么处理呢?最简单暴力的办法就是重启,在RediS4.O版本之后支持在运行期进行自动内存碎片清理,主要通过设置Configsetactivedefragyes来进行实现,同时也提供了memoryPUrge命令来手动进行内存碎片清理。RediS默认是无限使用内存的,所以防止系统内存被耗尽,需要对RediS的内存上限进行设置,ReC1iS使用maxmemory参数限制最大可

4、用内存。通过前面的介绍我们可以得知maxmemory配置的是Redis实际使用的内存量,也就是USeC1memOry统计项对应的内存。由于内存碎片率的存在,实际消耗的内存可能会比InaXmeinory设置的更大,实际使用时要小心这部分内存溢出。根据惯例一般会预留出20%的服务器空闲内存防止内存溢出通过。RediS的内存上限可以通过COnfigsetmaxmemory进行动态修改,即修改最大可用内存。通过动态修改maxmemory,可以实现在当前服务器下动态伸缩ReCIiS内存的目的,考虑到现在在部署RediS时大多采用集群或哨兵模式,单台主机上并非Redis单实例,因此建议针对所有的Redis

5、进程都要配置maxmemoryoRec1iS针对内存使用情况提供内存回收策略供运维人员进行配置,主要用于删除到达过期时间的键对象以及当Redis内存使用达到所设置的maxmemory上限时则执行内存回收策略。Redis所有的键都可以设置过期属性,在数据库结构中的expires字典中保存了数据库中所有键的过期时间,我们称expire这个字典为过期字典。由于进程内保存大量的键,维护每个键精准的过期删除机制会导致消耗大量的CPU,对于单线程的Redis来说成本过高,因此Redis采用情性删除和定时任务删除机制实现过期键的内存回收。惰性删除:惰性删除用于当客户端读取带有超时属性的键时,如果已经超过键设

6、置的过期时间,会执行删除操作并返回空,这种删除策略对CPU是友好的,删除操作只有在不得不的情况下才会进行,不会对其他的expirekey上浪费无谓的CPU时间。但是这种策略对内存不友好,一个key已经过期,但是在它被操作之前不会被删除,仍然占据内存空间。如果有大量的过期键存在但是又很少被访问到,那会造成大量的内存空间浪费。因为可能存在一些key永远不会被再次访问到,这些设置了过期时间的key也是需要在过期后被删除的,我们甚至可以将这种情况看作是一种内存泄露一-无用的垃圾数据占用了大量的内存,而服务器却不会自己去释放它们,这对于运行状态非常依赖于内存的RediS服务器来说,肯定不是一个好消息。正

7、因为如此,RediS还提供另一种定时任务删除机制作为惰性删除的补充。定时任务删除:RediS内部维护一个定时任务,默认每秒运行10次(通过配置SerVer.hz控制)RediS会周期性的随机测试一批设置了过期时间的key并进行处理。测试到的已过期的key将被删除。当Redis所用内存达到maxmemory上限时会触发相应的溢出控制策略。具体策略受InaXme1nory-PO1iCy参数控制,RediS支持6种策略,如下所示:1) noeviction:默认策略,数据永不过期,不会删除任何数据,当内存不足以容纳新写入数据时,新写入操作会报错,一般不推荐使用。2) vo1ati1e-1ru:根据1

8、RU算法删除设置了超时属性(expire)的键,直到腾出足够空间为止。如果没有可删除的键对象,回退到noeviction策略。这种情况一般是把Redis既当缓存,又做持久化存储的时候才用。3) a11keys-1ru:根据1RU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。一般推荐使用该策略4) a11keys-random:内存不足以容纳新写入数据时,在键空间中,随机移除某个Keyo5) vo1ati1e-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个Keyo6) vo1ati1e-tt1:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的Key优先移除。如果没有,回退到noeviction策略。内存溢出控制策略可以采用configsetInaXmemory-PO1iCypo1icy动态配置。我们上文已经介绍了RediS所支持的的内存溢出应对策略,运维人员可以根据实际需求灵活定制。I,综上所述,我们从RediS数据库最关键特性一内存出发,详细介绍了RediS的内存使用和内存管理,而这也是成为一名专业RediS运维人员的核心技能。大家通过本文能够提升对RediS内存的认识,但要真正掌握则需要长时间的学习和使用,希望大家共同努力学习和进步。-全文完-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 汇报材料

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服