本文章在微服务技术前的理解!!
本文章在微服务技术前的理解!!
本文章在微服务技术前的理解!!
黑马Redis课程的总结
缓存穿透
产生原因
用户在进行查询时,查错了,然而以为是对的,一直查询(有点类似于我们访问某个网站刷新不出来,我们普遍会疯狂点刷新)或者恶意查询(利用某个不存在的一直在查询,道理是一样的),然而缓存中和数据库中没有该数据,导致查询请求直接打到数据库。
解决方案
一直查询数据库会导致数据库的性能降低,从而降低体验,所以要解决这个问题,除了前端对格式提高校验要求等,还有后端的一些解决方案。
方案一:缓存不存在的数据
我们可以在查询完数据库以后,如果数据不存在,把数据添加进缓存,并且设置一个较短缓存的时间。
这样下次用户进行查询时,会直接从缓存中拿取"不存在的数据",降低数据库压力。
//这里只写逻辑
//1.查询缓存
//2.缓存不存在
//3.查询数据库
/*更新部分
3.1 对结果进行判定
3.2 如果结果存在,直接返回
3.3如果结果不存在,存入缓存,设置一个有效期
*/
//4.返回结果
优点
1.实现简单
2.维护方便
缺点
1.有额外内存消耗
2.短期数据不一致
短期数据不一致:在存入空对象的时候设置了短暂的有效期,在这个有效期内,通过此key存入了数据
只要缓存还没过期,就会导致读取数据还是空。