学习下Redis内存模型

💡 原文中文,约3500字,阅读约需9分钟。
📝

内容提要

本文介绍了Redis的内存模型,包括内存统计、划分、存储细节及对象类型与内部编码。通过info memory命令分析used_memory与used_memory_rss的区别,探讨内存碎片及其影响。Redis使用jemalloc作为内存分配器,介绍RedisObject结构及其在内存管理中的作用,强调SDS作为字符串表示的优势及内部编码的转换关系。

🎯

关键要点

  • Redis内存模型包括内存统计、划分、存储细节及对象类型与内部编码。
  • info memory命令用于查看内存使用情况,包括used_memory和used_memory_rss的区别。
  • used_memory表示Redis分配的内存总量,used_memory_rss表示Redis进程占用的操作系统内存。
  • 内存碎片比率通过used_memory_rss与used_memory的比值计算,值大于1表示内存碎片比例高。
  • Redis使用jemalloc作为默认内存分配器,支持libc和tcmalloc。
  • Redis的内存消耗包括数据、进程本身内存、缓冲内存和内存碎片。
  • RedisObject结构用于存储五种数据类型,包含类型、内部编码、内存回收等功能。
  • SDS(简单动态字符串)用于字符串表示,具有内存管理优势。
  • 内部编码包括int、embstr和raw,embstr用于小于等于39字节的字符串,raw用于大于39字节的字符串。
  • 压缩列表和链表用于节省空间,压缩列表适用于元素少于512个且字符串长度不足64字节的情况。

延伸问答

Redis的内存模型主要包括哪些内容?

Redis的内存模型主要包括内存统计、内存划分、存储细节及对象类型与内部编码。

info memory命令的作用是什么?

info memory命令用于查看Redis的内存使用情况,包括used_memory和used_memory_rss的区别。

used_memory和used_memory_rss有什么区别?

used_memory表示Redis分配的内存总量,而used_memory_rss表示Redis进程占用的操作系统内存,包括内存碎片等。

Redis使用的内存分配器是什么?

Redis默认使用jemalloc作为内存分配器,也支持libc和tcmalloc。

什么是SDS,它有什么优势?

SDS是简单动态字符串,具有内存管理优势,避免了C字符串的缺陷。

RedisObject结构的作用是什么?

RedisObject结构用于存储五种数据类型,包含类型、内部编码、内存回收等功能。

➡️

继续阅读