Redis存储容量调整的核心是通过配置maxmemory参数来限制内存使用,当内存达到上限时启用eviction策略如allkeys-lru来自动清理不常用数据。同时,优化数据结构使用Hash代替多个String键,开启压缩和AOF/RDB持久化策略,结合内存碎片整理工具来提升效率。
来源1
在redis.conf中设置maxmemory 2gb来限制Redis实例的最大内存使用量。配置eviction策略:maxmemory-policy allkeys-lru,这会优先淘汰最近最少使用的键值对。定期运行MEMORY PURGE命令清理内存碎片。
来源2
使用hash数据结构存储对象,而不是多个string键,能节省大量内存。例如,一个用户对象用hset user:100 name "张三" age 25,而不是单独的键。开启lazyfree-lazy-eviction yes延迟删除键,避免阻塞。
来源3
配置rdb压缩:rdbcompression yes,减少RDB文件大小。AOF使用no-appendfsync-on-rewrite减少IO。监控info memory输出中的used_memory和used_memory_rss,used_memory_rss过高说明碎片多,需要重启或使用内存优化工具。
来源4
activedefrag yes开启主动内存碎片整理,threshold下限20%,上限80%。对于大key,使用scan命令分批删除,避免内存峰值。pipeline批量操作减少网络往返,提升吞吐。
来源5
maxmemory-samples 5调整LRU采样数,值越大越精确但CPU开销高。禁用THP(透明大页):echo never > /sys/kernel/mm/transparent_hugepage/enabled。使用jemalloc作为内存分配器,默认已优化。
来源6
对于List/Set等集合,控制元素数量,避免单键过大导致内存放大。开启内存统计:latency monitor跟踪慢命令。集群模式下分片数据,单节点内存压力降低。
FAQ
Q: 如何查看Redis当前内存使用?
A: 使用INFO memory命令,关注used_memory和used_memory_peak。
Q: maxmemory达到后会怎样?
A: 根据maxmemory-policy设置删除键,否则返回错误拒绝新写。
Q: 怎么减少内存碎片?
A: 配置activedefrag yes,或重启Redis实例。
Q: 大key怎么处理?
A: 用redis-cli --bigkeys扫描并优化数据结构。