【知了堂学习笔记】——缓存和懒加载

本文介绍了延迟加载(懒加载)的概念及应用场景,并详细解析了一级缓存与二级缓存的工作原理及其配置方法。

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

延迟加载(懒加载)

1.真正要使用数据的时候,才去发送sql语句请求数据库的数据
a)Eg:select * from blog where id =2
后续其实暂时不会用到blog对象中的author对象
懒得执行select * from author where id = ?
只有真正要使用author的时候,才去发送sql语句
b)lazyLoadingEnable:启用懒加载
c)aggressiveLazyLoading :启用不完整加载

缓存

1.概念
a)存储数据(使用频繁的数据)的临时地方
b)常用的属性
i.命中率
ii.最大元素:缓存的最大值
iii.替代策略(清空策略):缓存有最大元素,如果缓存满了,应该清理的数据和不该清理的数据就涉及到了其中的该有的算法
1.LFU:Least Frequently Used 计算频率-频率低的踢出
2.LRU:Least Recently Used 最新被访问的对象被放入缓存池顶部
c)命中
i.如果还有缓存空间,则没有命中的对象直接存储到缓存中
ii.如果缓存满了,就会按照某种策略,将缓存中就对象退出,保存新对象-替代策略
d)存储成本:将数据存入缓存的时间和空间成本
e)索引成本
f)失效:缓存数据需要更新时,缓存数据失效
2.分类
a)技术上:内存/硬盘文件/数据库
b)EE中的分类
i.服务器缓存:设置缓存服务器放置在web应用服务器的前面,将用户的请求和应用服务器的响应写入缓存服务器,为后续用户的访问提供更快的响应
ii.数据库缓存:配置数据库缓存,数据库存储过程,连接池技术等,数据库缓存挂掉重建缓存会瞬间导致数据库压力增大
iii.浏览器缓存:h5中storage,缓存html和图片/js/css
iv.内存缓存:分布式缓存机制
c)缓存和应用的耦合度
i.Local cache
ii.Remote cache:支持多种语言
3.一级缓存:基于session的缓存,同一个session下的数据实现缓存共享
a)sqlSession存在缓存的概念
b)Sqlsession查询出来的数据会默认被放入缓存中
c)Sql语句session发送,session每次发送sql语句之前,会先进入缓存区域查看是否有相同sql语句结果是否存在
d)如果存在,就直接从缓存中去数据
e)如果不存在,才发送sql语句去数据库端取数据
4.二级缓存:不同session下的数据实现缓存共享,SqlSessionFactory的缓存
a)配置二级缓存
b)配置映射支持的二级缓存
c)映射类实现序列化
i.对象序列化:对对象进行压缩,解压缩,方便进行对象的存储(从内存到文件系统中)
ii.二级缓存经常会被配置在其他地方,提升技能,但是容易崩溃
d)Session被关闭后数据进入二级缓存
e)步骤
i.b)启用二级缓存
1.Config.xml
2.<setting name = “cacheEnable” value=”true”>
ii.Mapper.xml
1.<cache></cache>
iii.Model对象进行序列化
1.实现serializable接口
iv.Test.java
1.session.close
5.一级缓存和二级缓存
a)查询出来的数据会默认存入一级缓存,配置当前mapper支持二级缓存,存在二级缓存
b)当出现commit操作的时候,二级缓存还是一级缓存都会被刷新
c)可以禁用当前查询缓存:userCache
d)缓存实现:hashMap/同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值