建设网站八大员成绩查询,温州网约车哪个平台最好,一个公司做两个网站可以吗,太原app定制【遇见青山】项目难点#xff1a;缓存穿透的解决方案1.缓存穿透现象缓存空对象布隆过滤其他方案2.解决方案#xff0c;缓存空数据1.缓存穿透现象
缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在#xff0c;这样缓存永远不会生效#xff0c;这些请求都会打到数据…
【遇见青山】项目难点缓存穿透的解决方案1.缓存穿透现象缓存空对象布隆过滤其他方案2.解决方案缓存空数据1.缓存穿透现象
缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在这样缓存永远不会生效这些请求都会打到数据库。一般是指黑客的恶意流量攻击
常见的解决方案有两种
缓存空对象 优点实现简单维护方便缺点额外的内存消耗可能造成短期的不一致
布隆过滤 优点内存占用较少没有多余key缺点实现复杂存在误判可能
其他方案
增强id的复杂度避免被猜测id规律做好数据的基础格式校验加强用户权限校验做好热点参数的限流 2.解决方案缓存空数据
首先在第一次查询不存在时缓存空数据数据到Redis中
// 不存在查询数据库
Shop shop getById(id);
// 查询数据库不存在返回错误
if (shop null) {// 将null值写入Redis防止缓存穿透问题stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY id, , CACHE_NULL_TTL, TimeUnit.MINUTES);return Result.fail(店铺不存在);
}在查询数据库之前判断缓存的值是否为值如果是则直接返回错误
// 判断命中的是否为空值
if (.equals(shopJson)) {return Result.fail(店铺信息不存在);
}测试查询不存在的商户信息Redis中保存了值再次查询时则不通过数据库直接在缓存层命中