08 redis如何做内存优化

vvEcho 2024-01-20 14:08:37
Categories: Tags:

redis优化内存分为两个层面
大的层面:

  1. 合理设置数据过期时间
    使用 SCAN + OBJECT IDLETIME 批量定位长期未访问的 Key 并删除

  2. 合理设置内存淘汰策略
    结合 volatile-lru 或 allkeys-lfu 淘汰策略,及时清理无效数据

  3. 内存碎片优化
    启用 jemalloc 分配器,定期执行 MEMORY PURGE 或重启实例整理碎片
    监控碎片率(mem_fragmentation_ratio),超过 1.5 时需干预

小的层面:

  1. 写入数据时,合理选择数据类型

  2. 利用高效数据结构
    Bitmaps:适用于布尔型数据(如用户签到、特征标记),1亿用户仅需 12MB 内存
    HyperLogLog:统计独立访客(UV)等场景,误差约 0.81%,内存消耗极低
    Hash 分桶:大对象拆分为多个 Hash 存储(如用户数据按字段分组),减少单Key体积
    案例:使用 HGETALL 分片存储用户属性,避免单 Key 过大导致的性能瓶颈

  3. 利用数据结构压缩
    对文本数据(如 JSON)启用压缩(Snappy、LZ4),压缩率可达 60% 以上

  4. key和value写入时避免长字符
    例如:user:123:info可以调整为u:123:info 减少key长度