面试题——Redis

1.简述一下缓存穿透,缓存击穿,缓存雪崩 ?

缓存穿透:大量恶意请求一个不存在的数据,使得压力绕过Redis缓存层打到数据库,造成数据库瘫痪

处理:设置黑名单,维护一个可能存在也可能不存在的黑名单数据列表,对请求进行过滤(简单高效)

布隆过滤器,会出现误删,且相对麻烦(不存在一定不存在,存在可能存在[即误判])

缓存击穿:缓存在某一时刻key过期,恰巧有大量对这个key的请求打过来,大并发会把数据库压垮

处理:提前预热,用Xxl-job,在秒杀开始前每十分钟扫描一次,如果过期,就发送查询请求,让Redis去数据库拿数据写到Redis中

缓存雪崩:在Redis设置了相同的TTL(过期时间),导致在同一时刻大量的Key同时失效

处理:错峰:用随机生成数设置TTL,使每个Key的过期时间都不一样,避免集体失效


2.为什么用Redis?(优点)

1.内存型数据库,效率快

2.工作单线程worker,串行化原子操作(IO线程是多线程)-避免上下文切换

3.IO模型,支持高并发

4.KV模型,V具有类型结构

5.具有本地方法,计算向数据移动

6.二进制安全,Value最大512M


3.如何保证缓存及数据库一致性

一般我们采取延迟双删,即先删除缓存再更新数据库数据,搁3~5秒再删除缓存数据.但极端情况下也会出现某线程速度慢,运行耗时超过了双删的时间,所以延迟双删也不能绝对保证一致性.

所以我们采取了阿里的Canal,用Canal通过Binlog慢日志监听数据库的变化,发生变化时向MQ发送消息,MQ启用一个消费者更新Redis的缓存,最终保持一致性.


4.Redis数据结构应用场景

1.字符串(String): 储存字符串,整数,浮点数等类型值。 (计数器:访问量统计,销量统计)

2.列表(List): 按照插入顺序储存一组字符串

3.集合(Set):无序储存一组字符串,支持集合运算。(交集并集)

4.有序集合(ZSet):有序储存一组字符串,每个字符串关联一个分数,(排行榜,统计排名)

5.哈希表(Hash):储存键值对,其中键值都是字符串类型


5.Redis是单线程还是多线程?

总结:Redis5是单线程         Redis6后是单线程+多线程(即工作线程单线程,IO线程多线程)


6.Redis的持久化?

RDB:存储数据结果,关注点在数据(快照)

AOF:存储操作过程,关注点在数据的操作过程(命令)

优点:

RDB:恢复数据快 ; 不额外占用空间

AOF:不易丢失数据,安全性高 ; 保存所有写操作,可读性高

 缺点:

RDB:快照有间隔,丢失数据多 ; 数据集庞大时fork()非常耗时,可能造成服务器停止处理客户端

AOF:恢复数据速度慢 ; 占用空间大


7.在百万keys的Redis里面,如何模糊查找某个key. 

使用Scan:每次调用scan 命令都会返回一个新的游标和一批键名,可以分批查找 ,这样就不会造成线程的阻塞,提高了查询效率。


8.Redis的Key过期策略?

我们一般采取

惰性删除:当用户查询某个Key时,会检查这个Key是否已经过期,如果没过期则返回用户,如果过期则删除。

定期删除:定期删除是在Redis内部有一个定时任务,会定期删除一些过期的key。

两种策略都无法保证过期Kye一定删除,当内存不足时,Redis还会做内存回收,我们采取的是allkeys-lru,在内存不足时,会移除最近最少使用的key。


9.Redis集群模式

1.哨兵模式    2.主从复制    3.Redis官方的Cluster集群模式


10.为什么使用redis分布式锁?

为什么要用分布式锁? 保证一个方法在高并发情况下的同一时间只能被同一个线程执行。

相较于mysql分布式锁,redis分布式锁性能上更好,提供了原子操作,功能上更加丰富.设置一个ttl过期时间,通过Redis分布式锁的看门狗机制,会自动检查线程是否执行完毕,若没有执行完毕则给线程续命,继续延长着任务ttl

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值