上一节我们完成了:

官方数据是:
过期淘汰的策略。淘汰策略:禁止驱逐(默认设置)
Redis 作为缓存使用,不断地增加Key,MaxMemory默认是0不进行限制。
在服务器上,保留1G给操作系统,剩下的就可以用作Redis的缓存。
通过修改 redis.conf 可以配置这个值:
maxmemory 1024mb # 获取值 CONFIG GET maxmemory 设置MaxMemory后,当趋近于设置的值时,通过缓存的淘汰策略,就会从内存中删除。
(最常用的方式)在 Redis 中可以使用 expire 设置一个键的存活时间,过了这段时间,键会自动被删除。
可以进行如下的测试:
./redis-cli # 2秒失效 expire name 2 get name # 这种是永久有效 set name 123 ttl name # 设置过期时间 expire name 10 ttl name Redis 数据的删除有定时删除、惰性删除、主动删除 三种方式。’
Redis 目前采用的是:
在设置键的过期时间时,创建一个定时器,让定时器在指定时间时删除键。
在 key 被访问的时候发现过期了,就删除这条数据。
我们打开 redis.conf 可以配置主动删除的策略:
# 默认是 no-enviction 不删除 maxmemory-policy allkeys-lru LRU(Least Recently Used)最近最少使用,算法根据数据的历史访问记录来进行淘汰数据。
其核心思想是:如果数据最近被访问过,那么将来被访问的概率也会更高
最常见的实现是使用一个链表来保存数据:
新数据插入到链表头部缓存命中的时候,则将数据移动到链表的头部链表满了的时候,将链表尾部的数据删除在服务器中保存了 LRU 计数器:server.lrulock,会定时更新,这个值是根据 server.unixtime 来计算的。
LRU的数据淘汰机制是:在数据集中随机挑选几个值,取出其中LRU最大的淘汰掉。
volatile-lru:从设置过期时间的数据集中挑选最少使用的淘汰allkeys-lru:从数据集中挑选最近最少使用的数据淘汰LFU(Least Frequency used)最不经常使用,如果一个数据在最近一段时间内使用次数很少,那么将来一段时间内被使用的可能性也很小。
volatile-ttl 从设置过期时间的数据里,选择快要过期的数据淘汰禁止驱逐数据,不淘汰数据(默认的)
allkeys-lru 在不确定时一般采用的策略 冷热数据交换等volatile-lru 比 allkeys-lru性能要差,因为要查过期时间allkeys-random 希望请求符合平均分布(每个值被访问的概率差不多)volatile-ttl