可以设置内存最大使用量,当内存使用量超出时,会施行数据淘汰策略。 Redis 具体有 6 种淘汰策略: volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰 volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰 volatile-random:从已设置过期时间的数据集中任意选择数据淘汰 allkeys-lru:从所有数据集中挑选最近最少使用的数据淘汰 allkeys-random:从所有数据集中任意选择数据进行淘汰 noeviction:禁止驱逐数据 Redis过期键淘汰策略: 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即对键的删除操作。 优点:通过使用定时器,定时删除策略可以保证过期键会尽可能快地被删除,并释放过期键所占用的内存。 缺点:对CPU时间不友好:在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分CPU时间。 除此之外,创建一个定时器需要用到Redis服务器中的时间时间,而当前时间事件的实现方式--无序链表,查找一个事件的时间复杂度为O(N)--并不能高效地处理大量时间事件。 惰性删除:放任键过期不管,但是每次从键空间获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。 优点:对CPU时间来说是最友好的:程序只会在取出键时才对键进行过期检查,这可以保证删除过期键的操作只会在非做不可的情况下进行,并且删除的目标仅限于当前处理的键。 缺点:对内存最不友好:如果一个键已经过期,而这个键又仍然保留在数据库中,那么只要这个过期键不被删除,它所占用的内存就不会释放。 比如:日志,在某个时间点之后,对它们的访问就会大大减少,甚至不再访问,如果这类过期数据大量地积压在数据库中,用户以为服务器已经自动将它们删除了,但实际上这些键仍然存在,而且键所占用的内存也没有释放,那么造成的后果肯定是非常严重的。 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。 优点:通过定期删除过期键,定期删除策略有效地减少了因为过期键而带来的内存浪费。 难点:确定删除操作执行的时长和频率。