Redis的Set数据结构提供了以下四种数据淘汰策略:
- noeviction(默认策略):当内存不足以容纳新写入数据时,新写入操作会报错。只有在没有设置淘汰策略或者设置的淘汰策略无效时,才会使用这个策略。需要注意的是,这种策略并不会淘汰任何已经存在的数据。
- allkeys-lru:当内存不足以容纳新写入数据时,新写入操作会报错。将会淘汰最近最少使用的数据。也就是说,如果某个key被访问过,那么它就不会被淘汰,即使内存空间不足。这个策略适用于访问模式有明显冷热差异的场景。
- volatile-lru:与allkeys-lru相似,但只淘汰设置了过期时间的key。如果某个key没有设置过期时间,那么即使内存空间不足,也不会被淘汰。这个策略适用于key的访问模式有明显冷热差异,且大部分key都有过期时间的场景。
- volatile-random:当内存不足以容纳新写入数据时,新写入操作会报错。将会从已设置过期时间的数据集(server. db[i]. expires)中任意选择数据淘汰。这个策略适用于访问模式无明显冷热差异,且对key的访问是随机的场景。
- volatile-ttl:当内存不足以容纳新写入数据时,新写入操作会报错。将会淘汰剩余过期时间最短的数据。这个策略适用于访问模式无明显冷热差异,且大部分key都有过期时间的场景,可以优先淘汰即将过期的数据以节省空间。
在使用这些淘汰策略时,需要根据具体的应用场景和需求来选择合适的策略。同时,需要注意的是,淘汰策略只会在Redis内存使用达到maxmemory设置的值时才会触发。因此,合理设置maxmemory也是使用淘汰策略的重要一环。