Redis 问答
1、redis有哪些数据结构?
答:字符串string、字典hash、列表list、集合set、有序集合scored set;加上pub/sub吧
2、如果有大量的key需要设置同一时间过期,一般需要注意什么?
答:如果大量的key过期时间过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。严重的话,肯能会出现雪崩,我们一般需要在时间上加上一个随机值,使得过期时间分散一些。
3、redis分布式锁是什么?
答:先拿setnx来争抢锁,抢到之后,再用一个expire给锁加一个超时时间,防止程序崩溃或者忘记解锁导致死锁。
3.5、如果setnx加锁之后,执行expire之前,程序崩溃,会怎么办?
答:会导致死锁,使用set的附加参数,set key value [ex second] [px ms] [nx |xx],这个是setnx和expire的组合,是原子操作。
4、如果redis中有1亿个key,其中有10w个key是某个固定的已知前缀,如何将他们全部找出来?
答:用keys 前缀*
5、如果redis正在线上的业务提供服务,使用keys的话会怎么样?如何解决?
答:因为redis是单线程的,使用keys指令,会导致线上服务停顿,等到keys执行完成,服务才会恢复。这个时候可以使用scan指令,scan指令可以无阻塞的提取指定模式的key列表:SCAN cursor [MATCH pattern] [COUNT count]。
6、redis异步队列?
答:一般使用list作为异步队列,rpush生产消息,lpop消费消息,当lpop没有消息时,sleep一下,在获取。也可以用blpop阻塞模式消费消息。
7、redis消息,生产一次,消费多次,如何实现?
答:使用订阅,pub/sub,多个订阅,可以实现多个订阅。
8、redis如何实现延时消息队列?
答:使用scoredset,拿时间戳作为score,消息内容为member,使用zadd来生产消息,消费者用zrangebyscore指令获取N秒之前的数据轮询进行处理。
9、redis是怎么持久化的?
答:RBD和AOF两种。

浙公网安备 33010602011771号