1. **NoEviction(不淘汰)**:当内存不足时,直接返回错误,不淘汰任何数据。该策略适用于禁止数据淘汰的场景,但需要保证内存足够。
2. **AllKeysLFU(最少使用次数淘汰)**:根据键的最近使用次数来淘汰数据,即淘汰访问次数最少的键。该策略适用于热点数据较少的场景,能够保留使用频率高的数据。
3. **AllKeysLRU(最近最少使用淘汰)**:根据键的最近访问时间来淘汰数据,即淘汰最久未被访问的键。该策略适用于热点数据较多的场景,能够保留最近被访问过的数据。
4. **VolatileLFU(带过期时间的最少使用次数淘汰)**:类似于AllKeysLFU,但只淘汰设置了过期时间的键。
5. **VolatileLRU(带过期时间的最近最少使用淘汰)**:类似于AllKeysLRU,但只淘汰设置了过期时间的键。
6. **VolatileRandom(带过期时间的随机淘汰)**:在设置了过期时间的键中,随机选择键来淘汰。
7. **Unknown(未知淘汰策略)**:Redis服务器不识别的淘汰策略,会返回错误。
可以通过`CONFIG SET maxmemory-policy <policy>`命令来设置数据淘汰策略,其中`<policy>`可以是以上策略的名称之一。
需要注意的是,Redis的数据淘汰策略是基于近似算法的,并不是严格按照策略来淘汰数据。同时,数据淘汰策略的选择应根据具体的业务场景和需求来确定,以保证数据的合理淘汰和性能的最优化。
除了以上的策略,Redis还提供了手动删除键的操作,通过使用`DEL key`命令可以直接删除指定的键和对应的值。
总之,Redis的数据淘汰策略是为了解决内存不足的问题,通过淘汰一些数据来释放内存空间。选择合适的淘汰策略可以根据业务场景和需求,平衡内存占用和数据访问的性能。
LRU(The Least Recently Used)是最经典的一款缓存淘汰算法,其原理是 :如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很低,当数据所占据的空间达到一定阈值时,这个最少被访问的数据将被淘汰掉。
LFU(Least frequently used)即最不频繁访问,其原理是:如果一个数据在近期被高频率地访问,那么在将来它被再访问的概率也会很高,而访问频率较低的数据将来很大概率不会再使用。