文章目录
配置redis
最大内存限制
查看redis内存相关信息:INFO memory
内存都去哪儿了?还没好好使用,就爆了
内存回收策略
过期键值
Redis如何淘汰过期的keys
内存移除控制策略
8个解决方方案
回收进程如何工作
近似LRU算法
内存优化
使用32位的redis
位级别和字级别的操作
尽可能使用散列表
配置redis
如果想要运行一个内存高效的 Redis 数据库,首先需要理解那些在 redis.conf 配置文件中所有内存相关的指令。redis.conf 文件为大多数指令提供了丰富的内联文档,使得一些复杂的内存优化选项易于理解、更改和测试。
传送门:redis.conf翻译与配置内存管理部分
大多数 Redis 配置指令可以在运行时通过 CONFIG SET 命令进行设置。
最大内存限制
Redis使用 maxmemory 参数限制最大可用内存,默认关闭。
限制内存的目的主要 有:

maxmemory 限制的是Redis实际使用的内存量,也就是 used_memory统计项对应的内存。由于内存碎片率的存在,实际消耗的内存 可能会比maxmemory设置的更大,实际使用时要小心这部分内存溢出。redis.conf翻译与配置(内存碎片部分)
Redis默认无限使用服务器内存,为防止极端情况下导致系统内存耗 尽,建议所有的Redis进程都要配置maxmemory。 在保证物理内存可用的情况下,系统中所有Redis实例可以调整 maxmemory参数来达到自由伸缩内存的目的。
查看redis内存相关信息:INFO memory


当 memfragmentationratio > 1 时,说明有部分内存并没有用于数据存储,而是被内存碎片所消耗,如果该值很大,说明碎片率严重。当 memfragmentationratio < 1 时,这种情况一般出现在操作系统把 Redis 内存交换 (swap) 到硬盘导致,出现这种情况要格外关注,由于硬盘速度远远慢于内存,Redis 性能会变得很差,甚至僵死。
当 Redis 内存超出可以获得内存时,操作系统会进行 swap,将旧的页写入硬盘。从硬盘读写大概比从内存读写要慢5个数量级。used_memory 指标可以帮助判断 Redis 是否有被swap的风险或者它已经被swap。
建议要设置和内存一样大小的交换区,如果没有交换区,一旦 Redis 突然需要的内存大于当前操作系统可用内存时,Redis 会因为 out of memory 而被 Linix Kernel 的 OOM Killer 直接杀死。虽然当 Redis 的数据被换出 (swap out) 时,Redis的性能会变差,但是总比直接被杀死的好。:建议自:
此处内容已被隐藏,请评论后查看!