本文介绍: 在使用 Redis 是,经常会遇到一个问题:明明做了数据删除,数据量不大,但是 使用 top 命令查看时,发现 Redis 还是占用了很多内存。这是因为,当删除数据后,Redis 释放的内存空间会由内存分配器管理,并不会立即返回操作系统,所以,操作系统操作系统仍然会记录这给 Redis 分配了大量内存。这往往会伴随一个潜在的风险点: Redis 释放的内存空间可能并不是联系的,那么,这些不连续的内存空间可能处于一种闲置的状态。这会导致一个问题:虽然有空闲时间,Redis 却无法用来保存数据。
前言
在使用 Redis 是,经常会遇到一个问题:明明做了数据删除,数据量不大,但是 使用 top 命令查看时,发现 Redis 还是占用了很多内存。
这是因为,当删除数据后,Redis 释放的内存空间会由内存分配器管理,并不会立即返回操作系统,所以,操作系统操作系统仍然会记录这给 Redis 分配了大量内存。
这往往会伴随一个潜在的风险点: Redis 释放的内存空间可能并不是联系的,那么,这些不连续的内存空间可能处于一种闲置的状态。这会导致一个问题:虽然有空闲时间,Redis 却无法用来保存数据。
所以,本章就聊聊 Redis 的内存空间存储效率问题,为什么数据明明已经删除了,但内存却闲置着没有用,以及相应的解决办法。
1. 内存碎片
通常,内存空间闲置是因为操作系统发生了严重的内存碎片。
那么,什么是内存碎片?
为方便理解,举个高铁的车厢座位的例子。假设一节车厢的座位共有 60 个,现在已经卖了 57 张票,有 3 个朋友要一起乘坐高铁出行,刚好需要三张连载一起的票。但是,在选座位时,发现已经买不到连续的座位了。于是,你们只好换了一趟车。这样一来,这 3 个朋友就要改变出行时间,而且这趟车就空置了三个座位。
2.Redis的内存碎片是如何形成的?
2.1 内因:内存分配器的分配策略
2.2 外因:键值对大小不一样和删改操作
3.如何判断是否有内存碎片?
4.如何清理内存碎片?
操作系统:碎片清理的基本原理
Redis:内存碎片清理
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。