Redis 的 memory info

Redis 的内存使用状况可以使用info memory来获取。

需要重点关注的值是

used_memory_rss(用于存储消耗的物理内存),used_memory(用于存储消耗的内存= 物理内存 + 硬盘),以及他们的比值mem_fragmentation_ratio(used_memory_rss/used_memory)

used_memory_rss或者used_memory很高时,意味着当前的 Redis 实例正在蚕食系统中的内存/硬盘资源。

当这个mem_fragmentation_ratio大于 1 的时候,意味着用于存储消耗的物理内存超过了 Redis 自己掌控的内存值,也就意味着当前有些未能回收的内存泄漏或者碎片。

当这个mem_fragmentation_ratio小于 1 的时候,这意味着有一部分用于存储的内存,实际上是在使用虚拟内存中的 swap 空间,此时 Redis 的性能会非常差。

Redis 的内存轮廓

memory_used = 进程自身消耗的内存 + 存储对象的内存(大头) + buffer 内存

memory_used_rss - memory_used = 内存碎片

每次 Redis 构造 k-v 的时候,总好创建 key 对象和 value 对象,内存消耗 = sizeof(key) + sizeof(value)。特别地,bitmap 和 hyperloglog 是由字符串实现的,GEO 是由 zset 实现的。