博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于缓存击穿
阅读量:4322 次
发布时间:2019-06-06

本文共 743 字,大约阅读时间需要 2 分钟。

什么是缓存击穿?

我们先来看一段经典的代码,关于缓存使用的

查询先从缓存里面获取,缓存如果没有,那么再从数据库查询,并且写入缓存。

注意:在实际开发中,我们一般在缓存中,存储的数据结构是JSON字符串。

那么 就会有一个问题,假如从数据查询需要1秒时间

那么这1秒内请求都会直接到db,缓存被击穿,如果请求特别大的时候,可能数据库就会挂掉。

 

那应该那么解决? 我们一般采用,同步+双重检查的方式

请看代码

当第一次从缓存获取失败,我们就同步

当缓存失效以后

第二次进来以及后面的请求,都会从缓存里面获取

而第一次请求进来的请求会直接查询数据库会放入缓存中。

优化总结:

 

思考1 在实际开发中,其实缓存的逻辑是差不多,只是获取数据的方式不一样?想想能不能抽象下?

这里我做个代码演示

 

 

  

实际调用的时候

List
contents = contentServImp.getData("cache" + cateId, 20L, new CacheLoader
>() { @Override public List
getData() { List
contents = contentMapper.selectByExample(null); return contents; } });

  

转载于:https://www.cnblogs.com/javabigdata/p/7653216.html

你可能感兴趣的文章
DbVisualizer Pro 9.5.2中文乱码问题
查看>>
numpy.tile()
查看>>
[bzoj3944] Sum
查看>>
hadoop2.7节点的动态增加与删除
查看>>
Ogre: 天空
查看>>
关于NSDictionary的一点感悟
查看>>
CSS长度单位:px和pt的区别
查看>>
50.分治算法练习: 二分算法: 2703 奶牛代理商 XII
查看>>
Wampserver 403问题
查看>>
mysql日志详细解析
查看>>
解决关闭app权限弹框后无法识别页面对象问题
查看>>
struts2_对Map进行双层迭代
查看>>
asp.net是什么?asp.net、vb.net和c#.net有什么区别?
查看>>
PhotoView
查看>>
hdu 1735(贪心) 统计字数
查看>>
iOS 系统框架结构图
查看>>
uml系列(六)——行为图:活动&状态
查看>>
Learning Deconvolution Network for Semantic Segme小结
查看>>
Leetcode 424.替换后的最长重复字符
查看>>
第二阶段:2.商业需求文档MRD:1.M版本管理
查看>>