学习下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结构用于存储五种数据类型,包含类型、内部编码、内存回收等功能。
➡️