9个常见的复述,面试

  

9个常见的复述,面试“刁难“问题

  

1复述,有哪些数据结构?

  

字符串字符串,字典散列,列表列表,集合,有序集合SortedSet。
如果你是复述中高级用户,还需要加上下面几种数据结构HyperLogLog,地理,Pub/Sub。
如果你说还玩过复述,模块,像BloomFilter, RedisSearch, Redis-ML,面试官得眼睛就开始发亮了。

  

2使用过复述分布式锁么,它是什么回事?

  

先拿setnx来争抢锁,抢到之后,再用到期给锁加一个过期时间防止锁忘记了释放。
这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行之到期前进程意外崩溃或者要重启维护了,那会怎么样?
这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得设置指令有非常复杂的参数,这个应该是可以同时把setnx和到期合成一条指令来用的!对方这时会显露笑容,心里开始默念:摁,这小子还不错。

  

3假如复述,里面有1个亿个键,其中有10 w个关键是以某个固定的已知的前缀开头的,如果将它们全部找出来?

  

使用键指令可以扫出指定模式的关键列表。
对方接着追问:如果这个复述,正在给线上的业务提供服务,那使用键指令会有什么问题?
这个时候你要回答复述,关键的一个特性:复述的单线程的. keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用扫描指令,扫描指令可以无阻塞的提取出指定模式的关键列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用键指令长。

  

4使用过复述,做异步队列么,你是怎么用的?

  

一般使用列表结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当一睡会再重试。
如果对方追问可不可以不用睡眠呢?还列表有个指令叫blpop,在没有消息的时候,它会阻塞住直到消息到来。
如果对方追问能不能生产一次消费多次呢?使用pub/sub主题订阅者模式,可以实现1:N的消息队列。
如果对方追问pub/sub有什么缺点?在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。
如果对方追问复述,如何实现延时队列?我估计现在你很想把面试官一棒打死如果你手上有一根棒球棍的话,怎么问的这么详细。但是你很克制,然后神态自若的回答道:使用sortedset,拿时间戳作为得分,消息内容作为关键调用zadd来生产消息,消费者用zrangebyscore指令获取N秒之前的数据轮询进行处理。
到这里,面试官暗地里已经对你竖起了大拇指。但是他不知道的是此刻你却竖起了中指,在椅子背后。

  

5如果有大量的关键需要设置同一时间过期,一般需要注意什么?

  

如果大量的关键过期时间设置的过于集中,到过期的那个时间点,复述,可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。

  

6复述,如何做持久化的?

  

bgsave做镜像全量持久化,aof做增量持久化。因为bgsave会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要aof来配合使用。在复述,实例重启时,优先使用aof来恢复内存的状态,如果没有aof日志,就会使用rdb文件来恢复。
如果再问aof文件过大恢复时间过长怎么办?你告诉面试官,复述,会定期做aof重写,压缩aof文件日志大小。如果面试官不够满意,再拿出杀手锏答案,Redis4.0之后有了混合持久化的功能,将bgsave的全量和aof的增量做了融合处理,这样既保证了恢复的效率又兼顾了数据的安全性。这个功能甚至很多面试官都不知道,他们肯定会对你刮目相看。
如果对方追问那如果突然机器掉电会怎样?取决于aof日志同步属性的配置,如果不要求性能,在每条写指令时都同步一下磁盘,就不会丢失数据。但是在高性能的要求下每次都同步是不现实的,一般都使用定时同步,比如1 s1次,这个时候最多就会丢失1 s的数据。

  

7管道有什么好处,为什么要用管道吗?

  

可以将多次IO往返的时间缩减为一次,前提是管道执行的指令之间没有因果相关性。使用redis-benchmark进行压测的时候可以发现影响复述的每秒峰值的一个重要因素是管道批次指令的数目。

  

8复述的同步机制了解么?

  

复述,可以使用主从同步,从从同步。第一次同步时,主节点做一次bgsave,并同时将后续修改操作记录到内存缓冲区,待完成后将rdb文件全量同步到复制节点,复制节点接受完成后将rdb镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。

9个常见的复述,面试