缓存穿透,缓存击穿,缓存雪崩-面试必备技能

 缓存穿透:高并发访问数据库中不存在数据,放入缓存的数据也没有,击穿缓存每次都要查询数据库.

 1)有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层数据库的查询压力。

2)另外也有一个更为简单粗暴的方法,如果一个查询返回的数据为空(不管是数据不存在,还是系统故障),仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

缓存击穿:一个key过期,又来高并发访问. 直接高并发访问数据库.

1)让热点数据永远不过期.
2)加互斥锁,互斥锁参考代码如下 我在访问数据库是你就不要访问

缓存雪崩:一堆key同时过期
      设置过期时间不一致就ok. 热点数据永远不过期

if (courseTypesOfDb == null || courseTypesOfDb.size()<1){
    //缓存穿透
    redisClient.add(COURSETYPE_KEY_IN_CACHE,"[]");
}else{
    //转换为json字符串
    String jsonArrStr = JSONArray.toJSONString(courseTypesOfDb);
    //设置获取
    //缓存数据永远不过期 缓存击穿 缓存雪崩
    redisClient.add(COURSETYPE_KEY_IN_CACHE,jsonArrStr);
}
发布了6 篇原创文章 · 获赞 1 · 访问量 182

猜你喜欢

转载自blog.csdn.net/qq_41972951/article/details/104392502
今日推荐