首页 > 编程知识 正文

springboot缓存字典表,springboot全局缓存

时间:2023-05-06 05:14:58 阅读:32552 作者:2116

mybatis提供了查询缓存,以减少数据压力并提高数据库性能。 mybaits提供l1缓存和l2缓存。

一级高速缓存一级高速缓存是sqlSession级高速缓存。 在处理数据库时,必须生成sqlSession对象。 对象具有存储缓存数据的“内存区域”数据结构“HashMap”。 不同sqlSession之间的缓存数据区域(HashMap )互不影响。

一级缓存的范围是同一SqlSession,在同一SqlSession中执行两次同一sql语句。 第一次执行完成后,数据库中查询的数据写入缓存(内存),第二次从缓存检索数据后,不再从数据库查询检索数据,从而提高查询效率。 sqlSession结束后,sqlSession的一级缓存也不再存在。 Mybatis默认情况下打开l1缓存。

l2高速缓存l2高速缓存是映射器级别的高速缓存,多个sqlSession使用同一映射器的sql语句,而通过操作数据库获得的数据中存在l2高速缓存空间。 多个sqlSession可以共享l2缓存。 l2缓存在sqlSession之间共享。

l2缓存由多个sqlSession共享,范围为mapper的同一namespace,不同的sqlSession在同一namespace下执行两次sql语句,并将参数传递给sql,最终执行相同的sql语句, 第一次执行完成后,数据库中查询的数据将写入缓存(内存),第二次,Mybatis默认情况下未打开l2缓存。 必须将l2缓存设置为使用setting全局参数打开。

Spring缓存如果Spring与MyBatis集成,则MyBatis的l1缓存在事务不存在时被禁用。

如果事务没有打开,则此时不会启用一级高速缓存,因为对于每个查询,spring都会关闭旧的sqlSession并创建新的sqlSession。

打开事务时,spring使用threadLocal检索当前资源并将其绑定到同一sqlSession。 因此,此时一级缓存是有效的。

默认情况下,SpringBoot全局启用l2缓存。 要使用l2缓存,还必须在映射器中注明。

注释版使用@CacheNamespace注释(在特定命名空间(如类)中设置缓存并与xmlcache相对应)在mapper中使用l2缓存。

33558 www.Sina.com/@ cache namespace注释主要用于mybatis缓存,与cache属性相同。 缺省情况下,MyBatis 3不打开l2缓存。 要打开l2缓存,必须在SQL映射文件(mapper.xml )中添加:行

映射器名称eviction=' cn.my batis.my demo.mapper.student mapper ' cache eviction=' FIFO ' flush interval=' 60000 ' readon

setting name=' cache enabled ' value=' true '/cache namespace是一个注释,其源代码如下:

@ documented @ retention (retention policy.runtime ) target ) elementtype.type ) public @ interfacecachenamespace { class pppe Class? extends org.Apache.ibatis.cache.cache eviction () default LruCache.class; long flush间隔() default 0; intsize(default1024; boolean readWrite ()默认真; boolean blocking ()默认假; Property[] properties () default {} ); }如果要将配置文件与接口注释一起使用,则必须在xml配置文件中设置cache属性,然后在界面中将注释更改为@CacheNamespaceRef。

@CacheNamespace

Java没有指针,但Java有引用。 CacheNamespaceRef是引用。 那是谁的引用? 请参阅源代码注释:

anamespacetypetoreferenceacache (thenamespacenamebecomeafqcnofspecifiedtype ) )。

fqcn=全品质类别名称

上面的意思我想说明。 CacheNamespaceRef用作CacheNamespace的快捷键。 这是CacheNamespace的引用。

@ documented @ retention (retention policy.runtime ) target ) elementtype.type ) public @ interfacecachenamespaceref {/ion anamespacetypetoreferenceacache (thenamespacenamebecomeafqcnofspecifiedtype ) */Class? value (默认void.class;/* * anamespacenametoreferenceacache * @ since3.4.2*/string name () default ' ); }查看注释源,value是当前类,name是要使用的Mapper接口的完全限定名称,可以使用以下三种书写方式:

CacheNamespaceRef角色:

我们知道,MyBatis分为l1缓存和l2缓存。 一级缓存处于会话级,二级缓存处于APP应用程序级。 但是,MyBatis并不是简单地对整个APP只拥有一个Cache缓存对象,而是更精细地划分缓存。 也就是说,是映射器级别。 也就是说,每个映射器可以有一个Cache对象,如下所示:

)1)为每个映射器分配Cache缓存对象(使用Cache节点配置或@CacheNamespace注释);

(2)多个映射器共享一个Cache缓存对象(使用cache-ref节点设置或本文提到的@CacheNamespaceRef注释);

Mybatis缓存映像:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。