17_redis缓存过期淘汰策略

面试题

问题1:生产上你们的redis内存设置多少?

问题2:如何配置、修改redis的内存大小?

问题3:redis清理内存的方式?定期删除和惰性删除了解过吗?

问题4:redis缓存淘汰策略?

问题5:redis的LRu了解过吗?可否手写一个LRu算法?


redis默认内存多少?在哪里查看? 如何设置修改?

查看Redis最大占用内存

打开redis配置文件,设置maxmemory参数,maxmemory是bytes字节类型,注意转换。


redis默认内存多少可以用?

在这里插入图片描述


一般生产上你如何配置?

一般推荐Redis设置内存为最大物理内存的四分之三,也就是0.75


如何修改redis内存设置

通过修改文件配置:

17_redis缓存过期淘汰策略_第1张图片

通过命令修改:

17_redis缓存过期淘汰策略_第2张图片


什么命令查看redis内存使用情况?

info memory

真要打满了会怎么样? 如果Redis内存使用超出了设置的最大值会怎样?

改改配置,故意把最大值设为1个byte试试

OOM

设置了maxmemory的选项,假如redis内存使用达到上限

没有加上过期时间就会导致数据写满maxmemory 为了避免类似情况,引出下一章内存淘汰策略


redis缓存淘汰策略

删除策略

如果一个键是过期的,那它到了过期时间之后是不是马上就从内存中被被删除呢??如果回答yes,你自己走还是面试官送你?如果不是,那过期后到底什么时候被删除呢??是个什么操作?

定时删除

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

17_redis缓存过期淘汰策略_第3张图片


惰性删除

总结:对memory不友好,用存储空间换取处理器性能(拿空间换时间)

17_redis缓存过期淘汰策略_第4张图片


定期删除

定期抽样key,判断是否过期,但存在漏网之鱼

17_redis缓存过期淘汰策略_第5张图片


17_redis缓存过期淘汰策略_第6张图片

内存淘汰策略

种类:(redis6.0.8版本)

  • noeviction: 不会驱逐任何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算法进行删除

2个维度:

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

4个方面:

  • LRU
  • LFU
  • random
  • ttl

组成8个选项


你平时用哪一种?

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

如何配置、修改?

方式一:使用配置文件

17_redis缓存过期淘汰策略_第7张图片

方式二:使用命令

config set maxmemory-policy allkeys-lru


你可能感兴趣的:(#,Redis,redis)