讲讲304缓存的原理

本文介绍了HTTP状态码304的工作原理,当服务器检测到资源未修改时,会发送304响应,指示浏览器使用本地缓存,从而节省网络带宽和提升加载速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务器首先为请求生成ETag,服务器可在稍后的请求中,使用它来判断页面是否已经修改。本质上,客户端通过将该记号传回服务器要求服务器验证其(客户端)是否缓存。

304是HTTP状态码,服务器用它来标识这个文件没有修改,不返回内容,浏览器在接收到个状态码后,会使用浏览器已缓存的文件。

客户端请求页面A。服务器返回页面A,并给A加上一个ETag。客户端展现该页面,并将页面连同ETag一起缓存。

客户端再次请求页面A,并将上次请求时服务器返回的ETag起传递给服务器。

服务器检查该ETag,并判断岀该页面自上次客户端请求之后还未被修改,直接返回响应304(未修改一 Not modified)和一个空的响应体。

<< MyBatis 的二级缓存是一个应用程序级别的缓存,默认情况下它是关闭的。它作用于 SqlSessionFactory 层次上(即所有打开的 SqlSession 共享这个缓存),适用于多条查询语句共享数据的情况。 要使用 MyBatis 二级缓存,我们需要做一些配置,并且需要注意一些细节。以下是对二级缓存的工作原理、启用步骤及注意事项的具体介绍: ### 启用与配置 1. **在 Mapper 中开启二级缓存** 在每个需要使用二级缓存的Mapper文件中添加 `<cache/>` 标签: ```java <cache/> ``` 2. **全局配置 mybatis-config.xml 文件中的 cacheEnabled 参数为 true** 默认值是 `true`, 所以如果不需要的话可以忽略这一步。如果你明确设置则可以在 `mybatis-config.xml` 配置文件里这样做: ```xml <settings> <setting name="cacheEnabled" value="true"/> </settings> ``` 3. **确保返回结果类型可序列化(Serializable)** 对象必须实现 java.io.Serializable 接口,因为缓存的数据会进行序列化存储以便跨多个SqlSession实例时能正确恢复状态。 ### 工作机制 当一个 SQL 查询被执行后,其结果会被保存到相应的命名空间下的二级缓存区域中;如果后续有相同参数的查询请求,则直接从该命名空间对应的二级缓存获取数据而不是再次访问数据库。但要注意的是每次提交或回滚事务都会清空当前 Session 的一级缓存以及所属 Namespace 下的所有二级缓存内容以防脏读等问题发生。 ### 注意事项 - 不同的mapper有不同的namespace,只有同一个 namespace 下面的操作才会命中二级缓存; - 如果开启了延迟加载(lazy loading), 则关联对象不会被立即放入二缓; - 写操作(如 insert/update/delete )会使整个命名空间(namespace)下得二级缓存失效; - 使用自定义 Cache 或 EhCache等第三方插件可能带来更复杂的配置需求. 以上就是关于 MyBatis 二级缓存的一些基础知识了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫微前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值