原文地址:Redis面试相关内容了解下~(二)
1、Redis过期键的删除策略?
-
定时删除:在设置键的过期时间的同时创建一个定时器,让定时器在键的过期时间来临时执行对键的删除操作。
-
惰性删除:放任键过期不管,但每次从键空间取值时,都检查取得的键值是否过期,如已过期,就删除,反之则返回该键值。
-
定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面过期键,至于要删除多少,就是由算法决定了。
2、Redis的回收/淘汰策略?
-
volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。
-
volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。
-
volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。
-
allkeys-lru:从数据集中挑选最近最少使用的数据淘汰。
-
allkeys-random:从数据集中任意选择数据淘汰。
-
no-enviction(驱逐):禁止驱逐数据。
此六种机制中volatile和allkeys规定了是对已设置过期时间的数据集还是对全部数据集淘汰数据,后面的lru、ttl、random是三种不同的淘汰策略,最后加一种永不回收(no-enviction)策略。
3、使用淘汰策略的规则?
-
如数据呈幂律分布,也就是一部分访问频率高,其它低,则使用allkeys-lru。
-
如数据呈平等分布,也就是所有数据访问频率相等,则使用allkeys-random。
4、为什么Redis要将所有数据放入内存?
主要是为了实现快速读写,并通过异步的方式将数据写入磁盘,所以Redis具有快速和数据持久化的特征,如不讲数据放入内存,磁盘I/O速度会严重影响Redis性能,如设置了最大使用内存,则数据量达到一定程度之后就不再往内存写入数据。
5、Redis同步机制?
Redis可使用主从同步、从从同步,第一次同步时,主节点做一次bgsave,同时将后续修改操作记录到内存buffer,之后将rab文件全量同步到slave,slave将rab全量加载到内存,之后通知master将slave加载rab期间的操作记录再次同步到slave,重复之前的操作就完成了数据同步。
6、pipline有什么好处?为什么要用pipline?
可将多次I/O往返的时间缩短为一次,前提是pipline执行的指令之间没有因果相关性,使用redis-benchmark进行压测时可发现影响Redis的QPS峰值的重要因素是pipline各批次指令的数目。
7、Redis集群原理?
-
Redis Sentinel着眼于高可用,在master宕机时,会自动将slave升级为master,继续提供服务。
-
Redis Cluster着眼于扩展性,在单个Redis内存不足时,使用Cluster进行分片存储。
至此,本次分享就结束了,后期会慢慢补充。
以上仅为个人观点,不一定准确,能帮到各位那是最好的。
好啦,到这里本文就结束了,喜欢的话就来个三连击吧。
扫码关注公众号,获取更多优质内容。