Java编程基础学习Web开发之缓存击穿问题

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

给你学习路线:html-css-js-jq-javase-数据库-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

什么是缓存击穿?

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

Java编程基础学习Web开发之缓存击穿问题_第1张图片

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

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

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

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

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

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

请看代码

Java编程基础学习Web开发之缓存击穿问题_第2张图片

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

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

当缓存失效以后

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

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

优化总结:

思考1.这里我们锁住的是这个对象,当一个请求获取key为a的值时,锁住了。

在未解锁前,那么另一个请求获取key为b的值也是同步阻塞的,想想能不能再减小点锁的粒度?

比如使用key来加锁???

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

这里我做个代码演示

Java编程基础学习Web开发之缓存击穿问题_第3张图片
Java编程基础学习Web开发之缓存击穿问题_第4张图片

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

Java编程基础学习Web开发之缓存击穿问题_第5张图片

实际调用的时候

Java编程基础学习Web开发之缓存击穿问题_第6张图片


你可能感兴趣的:(Java编程基础学习Web开发之缓存击穿问题)