Redis面试大全及答案

本文详述了Redis在缓存方面的常见问题,包括缓存穿透、布隆过滤器、缓存击穿和缓存雪崩的解决方案,以及Redis的优缺点。还探讨了Redis的主从同步、数据持久化策略、过期策略、数据淘汰策略和分布式锁的实现。此外,文章讨论了Redis集群方案、哨兵模式和分片集群的工作原理,以及Redis的高性能特点,如单线程运行和I/O多路复用模型的应用。
摘要由CSDN通过智能技术生成

问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、什么是 Redis? 2、Redis 相比 memcached 有哪些优势? 3、Redis 支持哪几种数据类型? 4、Redis 主要消耗什么物理资源? 5、Redis 的全称是什么? 6、Redis 有哪几种数据淘汰策略? 7、Redis 官方为什么不提供 Windows 版本? 8、一个字符串类型的值能存储最大容量是多少? 9、为什么 Redis 需要把所有数据放到内存中? 10、Redis 集群方案应该怎么做?都有哪些方案? 11、Redis 集群方案什么情况下会导致整个集群不可用? 12、MySQL 里有 2000w 数据,Redis 中只存 20w 的数据, 如何保证 Redis 中的数据都是热点数据? 13、Redis 有哪些适合的场景? 14、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 15、RedisRedisson 有什么关系? 16、Jedis 与 Redisson 对比有什么优缺点? 17、Redis 如何设置密码及验证密码? 18、说说 Redis 哈希槽的概念? 19、Redis 集群的主从复制模型是怎样的? 20、Redis 集群会有写操作丢失吗?为什么? 21、Redis 集群之间是如何复制的? 22、Redis 集群最大节点个数是多少? 23、Redis 集群如何选择数据库? 24、怎么测试 Redis 的连通性? 25、Redis 中的管道有什么用? 26、怎么理解 Redis 事务? 27、Redis 事务相关的命令有哪几个? 28、Redis key 的过期时间和永久有效分别怎么设置? 29、Redis 如何做内存优化? 30、Redis 回收进程如何工作的? 31、Redis 回收使用的是什么算法? 32、Redis 如何做大量数据插入? 33、为什么要做 Redis 分区? 34、你知道有哪些 Redis 分区实现方案? 35、Redis 分区有什么缺点? 36、Redis 持久化数据和缓存怎么做扩容? 37、分布式 Redis 是前期做还是后期规模上来了再做好?为 什么? 38、Twemproxy 是什么? 39、支持一致性哈希的客户端有哪些? 40、Redis 与其他 key-value 存储有什么不同? 41、Redis 的内存占用情况怎么样? 42、都有哪些办法可以降低 Redis 的内存使用情况呢? 43、查看 Redis 使用情况及状态信息用什么命令? 44、Redis 的内存用完了会发生什么? 45、Redis 是单线程的,如何提高多核 CPU 的利用率? 46、一个 Redis 实例最多能存放多少的 keys?List、Set、 Sorted Set 他们最多能存放多少元素? 47、Redis 常见性能问题和解决方案? 48、Redis 提供了哪几种持久化方式? 49、如何选择合适的持久化方式? 50、修改配置不重启 Redis 会实时生效吗?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值