Redis缓存知识点汇总
请先思考如下问题
1.Redis的缓存击穿,穿透,雪崩是什么意思?原因和解决方案有哪些?
2.Redis支持宕机数据恢复,他的持久化方式及其原理是什么?
3.如何保证双写一致性,即如何保证Redis缓存与数据库的数据一致性?
4.Redis如何实现缓存过期删除?淘汰策略都有哪些?
5.Redis如何实现分布式锁,可重入锁?锁超时,但是业务还没执行完怎么办?
6.Redisson的看门狗机制?
7.Redis为什么那么快?单线程,多路复用?为什么不使用多线程。
1.缓存穿透
原因:Redis缓存穿透是指在高并发场景下,大量请求同时查询一个不存在的数据,这些请求会直接穿透Redis缓存,进而查询数据库,导致数据库压力过大,甚至可能崩溃。这种情况通常发生在缓存中没有命中数据,而数据库中也没有对应的数据,属于恶意访问场景。
解决:
1.布隆过滤器:使用布隆过滤器来预先判断数据库是否存在相应的数据。
2.缓存空值:查询结果后若数据库没有值,则缓存空值到redis中,就不会击穿到数据库中。
布隆过滤器: 布隆过滤器的工作原理基于以下几个步骤:
初始化:
创建一个大小为m的位数组,初始时所有位都设置为0。同时选择多个不同的哈希函数,这些哈希函数可以将元素映射到位数组中的一个位置。
插入元素:
当要插入一个元素时,使用这k个哈希函数计算出k个不同的位位置,并将这些位置的值设置为1。
查询元素:
当要查询一个元素是否在集合中时,同样使用这k个哈希函数计算出k个位位置,检查这些位置是否都为1。如果所有位置都为1,则认为元素可能在集合中;如果任一位置为0,则元素一定不在集合中。