加入收藏 | 设为首页 | 会员中心 | 我要投稿 孝感站长网 (https://www.0712zz.com.cn/)- 运营、云管理、管理运维、云计算、大数据!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

Redis内存使用和管理知识总结

发布时间:2021-03-16 16:15:41 所属栏目:外闻 来源:互联网
导读:purge命令来手动进行内存碎片清理。 Redis默认是无限使用内存的,所以防止系统内存被耗尽,需要对Redis的内存上限进行设置,Redis使用maxmemory参数限制最大可用内存。通过前面的介绍我们可以得知maxmemory配置的是Redis实际使用的内存量,也就是used_memory

 purge命令来手动进行内存碎片清理。

Redis默认是无限使用内存的,所以防止系统内存被耗尽,需要对Redis的内存上限进行设置,Redis使用maxmemory参数限制最大可用内存。通过前面的介绍我们可以得知maxmemory配置的是Redis实际使用的内存量,也就是used_memory统计项对应的内存。由于内存碎片率的存在,实际消耗的内存可能会比maxmemory设置的更大,实际使用时要小心这部分内存溢出。根据惯例一般会预留出20%的服务器空闲内存防止内存溢出通过。

Redis的内存上限可以通过config set maxmemory进行动态修改,即修改最大可用内存。通过动态修改maxmemory,可以实现在当前服务器下动态伸缩Redis内存的目的,考虑到现在在部署Redis时大多采用集群或哨兵模式,单台主机上并非Redis单实例,因此建议针对所有的Redis进程都要配置maxmemory。

Redis针对内存使用情况提供内存回收策略供运维人员进行配置,主要用于删除到达过期时间的键对象以及当Redis内存使用达到所设置的maxmemory上限时则执行内存回收策略。

Redis所有的键都可以设置过期属性,在数据库结构中的expires字典中保存了数据库中所有键的过期时间,我们称expire这个字典为过期字典。由于进程内保存大量的键,维护每个键精准的过期删除机制会导致消耗大量的CPU,对于单线程的Redis来说成本过高,因此Redis采用惰性删除和定时任务删除机制实现过期键的内存回收。

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

定时任务删除:Redis内部维护一个定时任务,默认每秒运行10次(通过配置server.hz控制)。Redis会周期性的随机测试一批设置了过期时间的key并进行处理。测试到的已过期的key将被删除。

当Redis所用内存达到maxmemory上限时会触发相应的溢出控制策略。具体策略受maxmemory-policy参数控制,Redis支持6种策略,如下所示:

1)noeviction:默认策略,数据永不过期,不会删除任何数据,当内存不足以容纳新写入数据时,新写入操作会报错,一般不推荐使用。

(编辑:孝感站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读