Redis面试大全及答案

问1: 什么是缓存穿透

答:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库

解决方案一:缓存空数据(优点:简单;缺点:消耗内存,可能发生数据不一致的问题)

解决方案二:布隆过滤器(优点:内存占用较少,没有多余key;缺点:实现复杂,存在误判)

问1: 什么是布隆过滤器

答:布隆过滤器主要是用于检索一个元素是否在一个集合中。

一般使用的是redisson实现的布隆过滤器。它的底层主要是先去初始化一个比较大数组,里面存放的二进制0或1。在一开始都是0,当一个key来了之后经过3次hash计算,模于数组长度找到数据的下标然后把数组中原来的0改为1,这样的话,三个数组的位置就能标明一个key的存在。

问2: 什么是缓存击穿

答:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮

解决方法一:缓存失效时先使用redis的setnx去设置一个互斥锁,成功去load db并回设缓存,否则重试get缓存的方法(强一致,性能差)

解决方法二:设置当前key逻辑过期,设置key时同时设置一个过期时间字段一块存入缓存中,查询时取出判断是否过期,如果过期则开通另一线程进行数据同步,当前线程正常返回旧数据(高可用,性能优,不能保证数据绝对一致)

问3: 什么是缓存雪崩

答:在同一时段大量的缓存key同时失效或者redis服务宕机,导致大量请求到达数据库,带来巨大压力

解决方法:将key的缓存失效时间分散开,可以在原有失效时间基础上增加一个随机值(设置redis集群,添加多级缓存Guava或Caffeine)

处理三大问题的保底策略:降级限流策略

问4: Redis的优缺点

答:优点:1、速度快:基于内存的数据库,读写速度非常快

2、支持多种数据结构:String(存储简单的字符串数据),List(存储有序的元素列表,支持排序和去重),Hash(存储对象和映射关系,哈希可以将一个对象的多个属性存储在一个键值对中,并且可以快速地根据某个属性进行查询),Set(存储不重复的元素集合),Zset(Sorted Set)(存储有序的元素集合)

3、高可用:支持主从复制,哨兵模式,集群

4、支持事务:保证一组操作的原子性

5、可扩展性:支持水平扩展,通过增加节点来提高系统的并发能力和存储能力

缺点:1、数据易丢失:如果服务器重启或关闭,数据将会丢失,需要使用持久化来保证数据的安全性

2、内存占用大:数据存储在内存中,数据量较大会占用较多的内存空间

3、不支持复杂查询:不支持复杂的查询操作,如关联查询,聚合查询等

4、性能受网络影响:如果网络延迟较大,可能会影响redis的性能

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值