什么是缓存穿透缓存雪崩 及 解决缓存穿透雪崩解决方案实现
Posted Perceus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是缓存穿透缓存雪崩 及 解决缓存穿透雪崩解决方案实现相关的知识,希望对你有一定的参考价值。
(目录)
1、 缓存穿透问题的解决思路
缓存穿透 :
常见的解决方案有两种:
缓存空对象
布隆过滤
缓存空对象思路分析:
布隆过滤:
① 编码解决商品查询的缓存穿透问题:
核心思路如下:
- 在原来的逻辑中:
- 现在的逻辑中:
代码:
/**
* 查询商铺
* @param id
* @return
*/
@Override
public Result queryShopById(Long id)
// 1. 从 Redis 中查询商铺缓存
String shopJson = stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY + id);
// 2. 判断是否存在
// 3. 存在 , 直接返回
if(StrUtil.isNotBlank(shopJson))
Shop shop=JSONUtil.toBean(shopJson, Shop.class);
return Result.ok(shop);
//判断命中空值 返回 404
if(shopJson != null)
// 返回一个错误信息
return Result.fail("商铺不存在");
// 4. 不存在 ,根据 id 去数据库查询
Shop shop = getById(id);
// 5. 不存在 , 返回 404
if(shop==null)
stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY + id, "",CACHE_NULL_TTL,TimeUnit.MINUTES);
return Result.fail("商铺不存在");
// 6. 存在 , 写入 Redis
stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY + id, JSONUtil.toJsonStr(shop),CACHE_SHOP_TTL, TimeUnit.MINUTES);
return Result.ok(shop);
② 总结:
缓存穿透产生的原因是什么?
缓存穿透的解决方案有哪些
?
2、 缓存雪崩问题及解决思路
缓存雪崩:
解决方案:
以上是关于什么是缓存穿透缓存雪崩 及 解决缓存穿透雪崩解决方案实现的主要内容,如果未能解决你的问题,请参考以下文章