Redis的内存回收机制

    技术2024-07-21  77

    一、Redis回收过期数据的策略 定期删除: 定期删除就是每隔一段时间就进行一次删除, redis定期删除并不会删除所有数据库中的所有过期对象,redis默认情况下每隔100ms执行一次定期删除,默认扫描16个数据库,每个库随机检查20个键。 惰性删除: 当客户端调用读写数据的命令时,redis会判断这些命令涉及到的键是否过期,如果过期就删除。 定时删除: 每个设置过期的时间的key都需要创建一个定时器,到过期时间就会立即清除,该策略可以立即清除过期的数据,对内存很友好,但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。 主从结构中,从机怎么处理过期的key: 当一个key过期,master会给slave合成一个DEL同步命令,slave不过独立过期key,而是等待master的DEL命令。 二、Redis的内存中数据淘汰策略,是指当内存使用达到最大内存时,需要使用缓存淘汰算法进行缓存数据淘汰。 LRU算法: 值得注意的是redis中并不会准确的删除所有键中最近最少使用的键,而是随机抽取5个键,删除这5个键中最近最少使用的键。 那么5这个数字也是可以设置采样的大小,如果设置为10,那么效果会更好,不过也会耗费更多的CPU资源。对应位置是配置文件的maxmeory-samples 缓存清理的配置: maxmemory用来设置redis存放数据的最大的内存大小,一旦超过这个内存大小之后,就会立即使用LRU算法清理掉部分数据,对于64bit的机器,如果maxmemory设置为0,那么就默认不限制内存的使用,直到耗尽所有的内存为止,但是对于32bit的机器,有一个隐式的闲置就是3GB Redis数据淘汰策略: maxmemory-policy,可以设置内存达到最大限制后,采取什么策略来处理。

    Processed: 0.010, SQL: 9