mybatis 缓存机制

1.缓存:暂时的存储一些数据,加快系统的查询速度。

2.CPU:
主频:4-2.7GHZ
内存:4G-8G 1333MHZ
(相当于缓存区,把硬盘的一些东西存起来)
CPU:一级缓存(4MB)
二级缓存(16MB)
放马上处理的东西。

给前端放个缓存数据库, 直接数据放在内存中。
不像mysql数据库,数据放在硬盘内,进行io读写。

在这里插入图片描述
如果1号员工,不经常修改。
把上次查询的数据,暂时放在一些地方。 避免跟数据库交互。

MyBaits缓存机制:Map;能保存查询出的一些数据。

跟数据库获取连接,发送sql,封装成结果,
这一系列操作,直接从map中拿好。

一级缓存

:线程级别的缓存,本地缓存,(sqlSession级别的缓存),默认

1.跟数据库的一次会话,开启一个新的sqlSession,开启一次新的连接,就有一个一级缓存。
2. 如果有新的会话,就有新的一级缓存。
当前会话的线程内,会有一个map,帮你存数据。

只有在同一个sqlSession期间,查询到的数据,会保存在这个sqlSession缓存中。
  下次使用sqlSession查询,就会存缓存中拿。

缓存失效:

不同的会话,不同的一级缓存。
在这里插入图片描述
明显发新的sql
在这里插入图片描述
2.sqlsession期间执行任何一个增删改操作,会把缓存清空。
为什么mybaits会清空缓存,是因为怕改了旧数据。

修改生效,关连接(close)之前,要提交(commit)。
在这里插入图片描述
3.手动清缓存,
调用clearCache(),他只是清空一级缓存。
清空当前sqlSeession的一级缓存。

缓存没有了,就会发新的sql了。
在这里插入图片描述

Cache接口,用的就是PerpetualCache实现类。缓存其实是个map。

在这里插入图片描述
然后put方法,放在一级缓存。
key是啥?
在这里插入图片描述

二级缓存:

一个用户一个sqlSession其实没有解决根本性问题。

         全局范围的缓存。namespace级别。
         除了当前线程。
         当前会话SqlSession能用外,其他也可以使用。     

一级缓存查的数据,别扔,放在二级缓存中。
以前是会话一关,整个缓存(map)就销毁了。

二级缓存,在SqlSession关闭或提交之后才会生效。

mybatis默认没有使用。

mybatis全局配置。cacheEnabled。开启全局缓存开关
还要说明哪些dao需要二级缓存。

mybatis-config.xml
在这里插入图片描述
在mapper文件加个cache标签。
在这里插入图片描述

test:

在这里插入图片描述
在这里插入图片描述
序列化异常:要实现mybatis二级缓存,你这javabean要实现序列化接口。
在这里插入图片描述
在这里插入图片描述

缓存相关属性

eviction 缓存回收策略
LRU:最近最少使用
FIFO: 先进先出
SOFI:软引用
WEAK:弱引用

size:缓存多少对象
readOnly:只读缓存。对象的引用给你。

关系

每此那么多的会话(sqlSession),自带一级缓存。
Dao带着二级缓存。

一级缓存关闭了。就把数据放在二级缓存了。
在这里插入图片描述
1.select标签,也有一个useCache,是看是否使用二级缓存。
在这里插入图片描述
2.增删改标签,有个flushCache。
同时清空一级还有二级缓存。

整合第三方缓存

1.写一个MyCache 实现Cache接口。
2.new一个redis
3.put方法,然后数据放在redis里面,不放在map里面。
4.get方法,然后数据从redis里面拿。
在这里插入图片描述
在这里插入图片描述

mybatis执行的时候。
1.默认会话先进来。
2.Executor:执行增删改查的执行器。
3.CachingExecutor:先来看二级缓存中有没有数据。如果没有再调用Executor增删改查。

4.Executor想要执行增删改查,要看一级缓存中有没有。
没有的话,查数据库,查到了就放到二级缓存。

mybatis缓存就是一个map,于是把它搞成接口,Cache接口。
在这里插入图片描述
ehcache非常专业的java进程内的缓存框架
1.在这里插入图片描述
2.ehcache配置文件
文件名:ehcache.xml,放在类路径下。

3.Dao的mapper文件下,
cache标签 type指定这个缓存框架。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于PyTorch的Embedding和LSTM的自动写诗实验LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,用于处理具有长期依赖关系的序列数据。传统的RNN在处理长序列时往往会遇到梯度消失或梯度爆炸的问题,导致无法有效地捕捉长期依赖。LSTM通过引入门控机制(Gating Mechanism)和记忆单元(Memory Cell)来克服这些问题。 以下是LSTM的基本结构和主要组件: 记忆单元(Memory Cell):记忆单元是LSTM的核心,用于存储长期信息。它像一个传送带一样,在整个链上运行,只有一些小的线性交互。信息很容易地在其上保持不变。 输入门(Input Gate):输入门决定了哪些新的信息会被加入到记忆单元中。它由当前时刻的输入和上一时刻的隐藏状态共同决定。 遗忘门(Forget Gate):遗忘门决定了哪些信息会从记忆单元中被丢弃或遗忘。它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 输出门(Output Gate):输出门决定了哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。同样地,它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 LSTM的计算过程可以大致描述为: 通过遗忘门决定从记忆单元中丢弃哪些信息。 通过输入门决定哪些新的信息会被加入到记忆单元中。 更新记忆单元的状态。 通过输出门决定哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。 由于LSTM能够有效地处理长期依赖关系,它在许多序列建模任务中都取得了很好的效果,如语音识别、文本生成、机器翻译、时序预测等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值