20 删除数据后,为什么内存占用率还是很高?

当删除掉 Redis 数据之后,其中释放掉的内存会交给内存分配器管理,并不会直接返还给操作系统,因此 Redis 就可能会存在删除大量数据之后,实际占用的数据量很小,但是操作系统显示 Redis 实例的内存占用率还是会很高的情况。其中有个风险就是 Redis 释放的数据内存分布本身就是不确定的,使其释放的内存空间是零散的,就有可能导致大量的零散的内存空间不能被不利于再次进行内存分配使用,使得即使 Redis 又足够的内存空间,但是却不能被利用起来,Redis 无法将其用于保存数据,导致减少了 Redis 实际保存数据量。

一、什么是内存碎片?

内存中细小的难以利用的内存空间。

二、内存碎片是如何形成的?

内存碎片产生的又两个原因,一个是内因一个是外因。内因:操作系统的内存分配机制导致;外因:Redis 自身的负载特性。

  • 内因:操作系统在进行内存分配的时候就必须按照操作系统的内部固定的最小的物理页进行内存的分配,因此就无法做到按需分配,操作系统就必须以物理页内存的大小为内存分配的基本单位进行分配给比需求的内存空间大小的大于等于的内存。
  • 外因:Redis 通常作为共用的缓存系统或者是键值对数据库对外提供服务。因此在 Redis 中保存的键值对的大小本身就是不一样,然而内存分配机制需要以物理页为基本单位为其分配一个大于等于的内存空间,导致产生一些内存碎片。同时在对键值对进行修改删除的时候就涉及到内存的释放及其再分配,这也是导致产生内存碎片的外因。
    我们可以使用 Redis 的 INFO 命令来查看内存的实际使用率,可以看到操作系统实际分配的内存空间和实际存储的数据量所占用的内存大小。

你可能感兴趣的:(Redis,核心技术与实战,redis)