redis面试题及答案《一》

276 阅读3分钟

redis默认内存大小是多少,你是如何配置redis内存大小的

1.在64位机器下,如果没有配置redis内存大小,则默认是系统自身最大内存,如果是32位系统,则最大3G内存

2.如果手动配置redis内存,打开redis.conf 配置文件,设置maxmemory参数,maxmemory是bytes字节类型。

微信截图_20210608140835.png

3.一般推荐redis设置内存为最大物理内存的四分之三。

4.查看redis内存命令:config get maxmemory ,设置内存命令:config get maxmemory 1024

如果redis内存使用超出了设置的最大值会怎么样?

1.直接会报OOM内存溢出

微信截图_20210608142041.png

redis三种不同的删除策略

1.定时删除

  • 能保证内存中数据的最大新鲜度,因为它保证过期键会在过期后马上被删除,但是对cpu不友好,因为删除会占用cup时间,如果cpu在繁忙的时候,就会给cup造成额外压力

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

2.惰性删除

  • 数据到达过期时间,不会做处理,等下次访问数据时,如果未过期,返回数据,发现已过期,则删除,这种在极端情况下,一个键如果过期,一直没被访问,它会占用内存一直不会释放,浪费内存资源

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

定期删除

  • 定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制,删除操作执行的时长和频率,来减少删除操作对cpu时间的影响。
  • 比如:周期性的轮询redis库中年的时效性数据,采用随机抽取策略,利用过期数据占比的方式控制删除频度
  • 特点:cpu性能占用设置有峰值,检测频度可以自动以设置,内存压力不是很大,长期占用内存的冷数据会被持续清理
  • 定期删除策略的难点是,确定删除操作执行的时长和频率:如果删除操作执行的频繁,或者执行的时间太久,定期删除策略就会退化定时删除策略,以至于CPU时间过多的消耗在删除过期键上,如果删除操作执行的太少,或者执行的时间太短,定时删除策略又会和惰性策略一样,出现浪费内存的情况。因此采用此策略,服务器必须根据情况,合理的设置删除操作的执行时长和执行频率
  • 总结: 周期性抽查存储空间(随机抽查,重点抽查)

举例:redis默认每个100ms检查,是否有过期的key,有过期的key则删除。注意:redis不是每隔100ms将所有key检查一次,而是随机抽取进行检查。因此,如果采用定期删除策略,会导致很多key到时间没有删除。

内存淘汰策略

微信截图_20210608150745.png

  • 一般用第二种,最近最少使用,是一种常用的页面置换算法。选择最近最久没使用的数据予以淘汰。

LRU淘汰策略算法实现请看另外一篇博客:详解redis的淘汰策略LRU算法实现