新增或者更新数据时,创建以后顺便存到redis中去【维护缓存】
获取的时候先从redis缓存中拿数据
如果拿数据的时候为空,则到数据库中拿数据,后再存到redis缓存中去
大量的商品【包括冷门商品】都进行上面的缓存,那么就很耗内存
针对每个数据进行缓存的时候 维护一个过期时间
查询的时候,我们对缓存时间做延期处理【超时延期】【读延期】,这样每天访问的数据就会一直在缓存中—【数据的冷热分离】
缓存击穿【缓存失效】
商品上架、批量更新的时候,可能大批商品缓存过期时间一样,大量访问这个商品没有缓存,那个商品也没有缓存,导致大量请求到达数据库这边,导致数据库压力大抖动【但数据库还有】
解决方案
给商品进行过期时间进行随机设置【随机数】
缓存穿透
秒杀商品不小心被删掉,商品在整个后端都没有,导致前端大量请求过来通过get请求都没有【每次查都没有】
另外场景:知道链接规则,造一大堆不存在的商品,进行高并发的请求
解决方案
限流解决
java层面解决:缓存一个空值