内存淘汰策略
Redis 在 64 位系统中默认是不限制内存大小的,在 32 位系统中默认是最大 3 GB,可以通过 redis. Conf 配置文件中的 maxmemory 参数设置最大的内存值。或者是通过 config set maxmemory
Redis 有两种内存淘汰策略
第一种是 TTL 过期删除策略
根据过期时间,采用懒删除和定时删除的两种模式
懒删除就是当 TTL 过期的时候,不会立即删除当前 key,而是当访问这个 key 的时候去判断当前的过期时间是否已经过期
定时删除每个一段时间 Redis 会扫描一定数量的 key,当过期 key 的数量超过了扫描数量的 25%就会删除其中已经过期的 key
第二种是内存淘汰的策略
Redis 的过期删除策略,缓存过期之后是立即删除吗? 如果不是那么它底层是怎么进行删除的
Redis 不会立即删除过期内存,它采用的是惰性删除和定时删除,因为如果是实时删除的话会占用较高的 CPU 资源
惰性删除: 只有当访问这个 key 的时候,才会判断这个 key 有没有过期。这种策略极大的节省了 CPU 的资源,但是对内存不是很友好,极端情况下可能会有大量的过期缓存没有被再次访问,导致不会被清除从而造成了内存的浪费
定时删除: 每隔一段时间,Redis 会扫描一定数量(设置了过期时间的)key,并清除其中已经过期的 key。使 CPU 和内存达到平衡
Redis 的拒绝策略 Redis 共有八种拒绝策略 LRU 算法: 淘汰距离上次使用最早,次数最少的 key
默认是 noeviction 不回收当 Redis 的内存超过使用配置的阈值时,在添加新的内存它会返回错误,不会驱逐任何的 key
Volatile-lru (推荐的拒绝策略):使用 LRU 算法进行数据淘汰(淘汰距离上次使用最早,并且次数最少的 key),只淘汰设定了有效期的 key
Allkeys-lru:使用 LRU 算法进行数据淘汰,这种拒绝策略可以淘汰所有的 key
AllKeys-LFU : 淘汰所有 key 中使用频率最少的 key
Allkeys-Random: 随机淘汰数据,这种拒绝策略可以淘汰所有的 key
Volatile-Random : 随机淘汰数据,只淘汰设定了有效期的 key
Volatile-TTL: 淘汰剩余有效期最短的 key
Volatile-LFU :淘汰所有配置了过期时间,里面使用频率最少的 key