一、默认内存大小

默认在64位操作系统下是不限制内存大小的,在32位操作系统下是3G。

 

二、推荐设置内存的大小

推荐为最大物理内存的75%。(关键字:HashMap的负载因子默认为0.75)

 

三、三种过期key的删除策略 

当一个key过期了,并不是立即从Redis中删除。而是以下三种方式:

1、立即删除

优点

  • 能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放

缺点

  • 对cpu是最不友好的。因为实时删除操作会占用cpu的时间

总结

  • 对CPU不友好,用处理器性能换取存储空间 (拿时间换空间)

2、惰性删除

key到达过期时间时,不做处理。等到下次访问时判断,如果过期则删除key,未过期则返回数据。

优点

  • 节省处理器性能

缺点

  • 占用空间大
  • 如果redis中存在大量不再使用的过期key,则一直无法删除,除非手动FLUSHDB。

总结

  • 对内存不友好,用存储空间换取处理器性能(拿空间换时间)

3、定期删除

定期删除策略是前两种策略的折中,定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响。

周期性的轮询Redis库中的时效性数据,采取随机抽取的策略,利用过期数据占比的方式控制删除额度

  • 特点1:CPU性能占用设置有峰值,检测频度可自定义设置
  • 特点2:内存压力不是很大,长期占用内存的冷数据会被持续清理

总结

  • 周期性抽查存储空间 (随机抽查,重点抽查)

定期删除策略的难点是确定删除操作执行的时长和频率:如果删除操作执行得太频繁,或者执行的时间太长,定期删除策略就会退化成立即删除策略,以至于将CPU时间过多地消耗在删除过期键上面。如果删除操作执行得太少,或者执行的时间太短,定期删除策略又会和惰性删除束略一样,出现浪费内存的情况。因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除操作的执行时长和执行频率。可能存在漏网之鱼,一直没有被抽取过。

 

四、八种内存淘汰策略

1、八种策略

noeviction: 不会驱逐任何key,即当内存超出限制后,报错返回OOM,但不驱逐任何key(出厂默认配置)

allkeys-lru: 对所有key使用LRU算法进行删除(推荐)

volatile-lru: 对所有设置了过期时间的key使用LRU算法进行删除

allkeys-random: 对所有key随机删除

volatile-random: 对所有设置了过期时间的key随机删除

volatile-ttl: 删除马上要过期的key

allkeys-lfu: 对所有key使用LFU算法进行删除

volatile-lfu: 对所有设置了过期时间的key使用LFU算法进行删除

 

LRU:Least Recently Used 最近最少使用。

LFU:Least Frequently Used 最不常使用。

2、总结

2 * 4 = 8

2是指2个维度

  • 过期键中筛选
  • 所有键中筛选

4是指4个方面

  • LRU
  • LFU
  • random:随机
  • ttl:过期时间

 3、配置

redis 缓存 过期 redis缓存过期时间多少合适_sed