前言
开始Redis面试知识的复习和资料的收集(收集和参考了网上的优质文章),本篇文章会不断更新,本系列文章主要分为两部分,一部分是该专题所涉及的相关基础知识,另一部分是面试题与思考题,大部分重要知识和基础知识的延伸会在面试题和思考题中给出,这样做的目的是给出具体的场景,便于理解知识(相较于直接在知识中展出),且我会以相对口语化的方式叙述。
建议关注,随着我复习的进度,内容会一直得到补充
基础知识
1.八种内存淘汰策略
**volatile-lru:**从已设置过期时间的数据集中挑选最近最少使用的删除
**volatile-ttl:**从已设置过期时间的数据集中挑选将要过期的删除
**volatile-random:**从已设置过期时间的数据集中随机挑选删除
**volatile-lfu:**从已设置过期时间的数据集中挑选使用频率最低的删除
**allkeys-lru:**从所有数据集中挑选最近最少使用的删除
**allkeys-lfu:**从所有数据集中挑选使用频率最低的删除
**allkeys-random:**从所有数据集中随机挑选删除
**no-eviction(默认策略):**如果内存不够,此时如果需要添加新的数据,就会直接报错,但是主线程不会被阻塞,仍能正常处理后续请求,该策略有利于保证数据不被丢失
2.三种键删除策略
定时删除: 在设置键过期时间的同时,还会为其设置一个定时器,等到键过期的时候,定时器就会将其删除
惰性删除: 当键过期的时候,不会立马被删除,等去访问这个键的时候,会先判断这个键是不是过期了,如果过期了,就删除
定期删除: redis数据库每隔100ms 就会随机抽取一些设置过期时间的key,检查是否过期并删除
redis默认采用定期删除和惰性删除
面试与思考
1.随着redis的长期使用,内存不够了怎么办?
redis有八种内存淘汰策略,分别是:
2.你在你自己的项目中使用的是什么策略,为什么?
我是用的是**volatile-lru,**因为我既希望一些没设置过期时间的数据持久保存,又希望最近使用很少的可以接收删除的数据清除掉
3.你知道三种键淘汰策略把,能讲讲你的理解嘛?
定时删除: 在设置键过期时间的同时,还会为其设置一个定时器,等到键过期的时候,定时器就会将其删除,这种策略对内存友好,因为一到时间就被删了,但对cpu不太友好,如果设置的定时器过多,删除很损耗cpu
惰性删除: 当键过期的时候,不会立马被删除,等去访问这个键的时候,会先判断这个键是不是过期了,如果过期了,就删除,这种策略对cpu友好但是对内存不友好,如果大量过期key不被访问,会占用一部分内存
定期删除: redis数据库每隔100ms 就会随机抽取一些设置过期时间的key,检查是否过期并删除,这种是前两种策略的折中,并且我们可以自定义间隔时间,实际上也就是自定义cpu与内存间的权衡
redis默认采用定期删除和惰性删除
后言
持续更新~~~~