redis内存空间
内存指标
- used_memory:Redis分配器分配的内存总量
- used_memory_rss:Redis进程占据操作系统的内存
- mem_fragmentation_ratio:碎片率, used_memory_rss/used_memory。
- 1-1.5正常。
- <1,表示使用虚拟内存,即磁盘
内存分类
- 对象内存:
- 键空间
- dict字典保存数据库所有键值对。
- 键:字符串对象。
- 值:5中对象中的一种。
- 过期字典
- expires字典保存所有键的过期时间。
- 键:数据的键。
- 值:毫秒级Unix时间戳。
- 键空间
- 缓冲内存
- 客户端缓冲。
- 复制积压缓冲。主从复制。
- AOF缓冲。持久化。
- 自身内存
- 子进程消耗。如AOF、RDB持久化fork的子进程。
- 内存碎片
内存碎片
- 产生原因:
- jemalloc分配机制。按照2^n字节来分,导致很多时候并不能使用完全。
- 数据修改删除。键值大小不一样,释放的内存并不能完全被复用。
- 碎片清理方式:
- 重启redis。
- redis4.0之后提供自动碎片清理机制,主线程执行,会影响正常请求,可调整执行时机和力度。
key过期策略
- 3种策略。
惰性删除
- 执行命令时如果该key设置了过期时间,检查过期,如果过期则删除,返回空。
定期删除
- 默认每隔100ms从expires字典中随机取key,检查过期,如果过期则删除。
内存淘汰
- 内存不足以容纳新写入的数据时,删除某些数据。
- 6种算法,常用算法 allkeys-lru ,移除键空间中最近最少使用key。