关于缓存击穿

什么是缓存击穿?java

咱们先来看一段经典的代码,关于缓存使用的数据库

查询先从缓存里面获取,缓存若是没有,那么再从数据库查询,而且写入缓存。缓存

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

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

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

 

那应该那么解决? 咱们通常采用,同步+双重检查的方式 优化

请看代码spa

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

当缓存失效之后开发

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

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

优化总结:

 

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

这里我作个代码演示

 

 

  

实际调用的时候

List<Content> contents = contentServImp.getData("cache" + cateId, 20L, new CacheLoader<List<Content>>() {
			@Override
			public List<Content> getData() {
		         List<Content> contents = contentMapper.selectByExample(null);
	                 return contents;
			}
		});
相关文章
相关标签/搜索