面试题
问题1:生产上你们的redis内存设置多少?
问题2:如何配置、修改redis的内存大小?
问题3:redis清理内存的方式?定期删除和惰性删除了解过吗?
问题4:redis缓存淘汰策略?
问题5:redis的LRu了解过吗?可否手写一个LRu算法?
redis默认内存多少?在哪里查看? 如何设置修改?
查看Redis最大占用内存
打开redis配置文件,设置maxmemory参数,maxmemory是bytes字节类型,注意转换。
redis默认内存多少可以用?
一般生产上你如何配置?
一般推荐Redis设置内存为最大物理内存的
四分之三
,也就是0.75
如何修改redis内存设置
通过修改文件配置:
通过命令修改:
什么命令查看redis内存使用情况?
info memory
真要打满了会怎么样? 如果Redis内存使用超出了设置的最大值会怎样?
改改配置,故意把最大值设为1个byte试试
报
OOM
设置了maxmemory的选项,假如redis内存使用达到上限
没有加上过期时间就会导致数据写满maxmemory 为了避免类似情况,引出下一章内存淘汰策略
redis缓存淘汰策略
删除策略
如果一个键是过期的,那它到了过期时间之后是不是马上就从内存中被被删除呢??如果回答yes,你自己走还是面试官送你?如果不是,那过期后到底什么时候被删除呢??是个什么操作?
定时删除
总结:
对CPU不友好
,用处理器性能换取存储空间(拿时间换空间)
惰性删除
总结:
对memory不友好
,用存储空间换取处理器性能(拿空间换时间)
定期删除
定期
抽样key
,判断是否过期,但存在漏网之鱼
内存淘汰策略
种类:(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算法进行删除
如何配置、修改?
方式一:使用配置文件
方式二:使用命令
config set maxmemory-policy allkeys-lru