Redis内存使用控制方法
通过maxmemory参数限制Redis使用的最大内存,防止内存溢出。可在redis.conf配置文件中设置(如maxmemory 4GB),或通过命令行动态调整(CONFIG SET maxmemory 4GB)。若未设置或设置为0,64位系统默认不限制内存,32位系统最多使用3GB。
当内存达到maxmemory限制时,通过淘汰策略清理数据以腾出空间。常见策略及适用场景:
选择紧凑、高效的数据结构减少内存占用:
hash-max-ziplist-entries(默认64)和hash-max-ziplist-value(默认512)参数,当哈希表的成员数不超过前者且每个成员值长度不超过后者时,采用紧凑的ziplist存储,节省内存;list-max-ziplist-entries(默认512)和list-max-ziplist-value(默认64)设置ziplist存储条件;set-max-intset-entries(默认512)参数,当集合元素全部为整数且数量不超过该值时,采用intset存储。EXPIRE命令设置过期时间(如SET key1 value1 EX 3600表示1小时后过期),让Redis自动清理;对于大规模数据,通过**分片(Sharding)将数据分布到多个Redis实例,或使用集群(Cluster)**自动分片并实现高可用,降低单机内存压力。
INFO memory命令查看used_memory(已使用内存)、used_memory_rss(物理内存占用)、maxmemory(最大内存)等指标;或通过redis-cli --stat实时监控内存变化;redis-cli --bigkeys命令查找占用内存大的key,针对性优化或删除。