准备:IntelliJ IDEA java
撰写时间:2021年 5 月 22 日
最近在学习缓存处理,怕忘记所以就决定记录一下
前台请求的数据先从缓存中获取,如果缓存中没有再从数据库获取,然后将获到的数据在前台显示出来。下面做了个简易流程图,便于理解缓存流程。
缓存问题有:缓存穿透、缓存击穿、缓存雪崩,下面将会分别举例说明和解决相对应的问题。
缓存穿透是指缓存和数据库中都没有数据,而用户不断发起请求,如发起为id 为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据 库压力过大。
图解:
缓存穿透例子:
@Autowired
private RedisTemplate redisTemplate;
public Integer findPrice(Long id) {
//从缓存中查询
Integer sku_price = (Integer)redisTemplate.boundHashOps("sku_price").get(id);
if(sku_price==null){
//缓存中没有,从数据库查询
Sku sku = skuMapper.selectByPrimaryKey(id);
if(sku!=