Redis 的内存管理机制是其高性能的核心设计之一,主要通过以下机制实现高效内存利用和关键数据管理:
默认分配器(jemalloc)
jemalloc
替代传统 malloc
,减少内存碎片并提升多线程场景下的分配效率。libc
(默认Linux分配器)、tcmalloc
(Google优化版)。内存池预分配
sbrk
或 mmap
)。动态字符串(SDS)
哈希表渐进式扩容
dictht[0]
和 dictht[1]
),扩容时逐步迁移数据,避免瞬时阻塞。压缩存储
ziplist
:小数据时使用连续内存存储(如 Hash/List 元素较少时)。intset
:整数集合优化存储(纯整数场景)。quicklist
:链表+ziplist 混合结构(List 类型默认)。惰性删除(Lazy Expire)
定期删除(Active Expire)
hz
参数调整频率(权衡CPU与内存)。当内存达到 maxmemory
限制时触发(需显式配置):
# redis.conf 示例配置
maxmemory 2gb
maxmemory-policy allkeys-lru
可选策略:
- LRU(最近最少使用):近似LRU算法(随机采样5键淘汰最久未使用)。
- LFU(最不经常使用):基于访问频率淘汰(Redis 4.0+)。
- TTL:优先淘汰剩余存活时间短的键。
- 随机淘汰(allkeys-random
/volatile-random
)。
- 不淘汰(noeviction
,默认报错OOM)。
共享对象池
内存碎片整理
activedefrag
自动整理碎片(需手动启用)。mem_fragmentation_ratio
(>1.5 需关注)。分片存储(Sharding)
关键命令
INFO memory # 查看内存使用详情
MEMORY STATS # 详细内存统计(Redis 4.0+)
MEMORY USAGE key # 计算特定键的内存占用
调优方向
maxmemory
和淘汰策略。HASH
分多个字段存储)。通过组合上述机制,Redis 在保证高性能的同时,实现了灵活的内存控制。实际应用中需根据业务特点(如读/写比例、数据时效性)选择合适的策略。