springboot mybatis缓存_secure boot未正确配置

springboot mybatis缓存_secure boot未正确配置什么是缓存?简单来讲,缓存就是存储在缓冲区里的内容,或者可以理解为存在内存中的内容。用户可以将经常查询的内容放到缓存中,再次使用时直接从缓存中取值,而不需要再查询数据库。这样做的优点是响应迅速,减少了系统资源(网络资源、CPU资源等)开销;缺点是需要占用内存资源,服务器一旦关机,缓存就会丢失,重启后需要重新将写一遍数据到内存。Mybatis的缓存Mybatis的缓存分为一级缓存和二级缓存。一级缓存是默认开启的,二级缓存需要手动开启。一级缓存是SqlSession级别的缓存,作用域是一个SqlSess

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

什么是缓存?

简单来讲,缓存就是存储在缓冲区里的内容,或者可以理解为存在内存中的内容。用户可以将经常查询的内容放到缓存中,再次使用时直接从缓存中取值,而不需要再查询数据库。这样做的优点是响应迅速,减少了系统资源(网络资源、CPU资源等)开销;缺点是需要占用内存资源,服务器一旦关机,缓存就会丢失,重启后需要重新将写一遍数据到内存。

Mybatis的缓存
Mybatis的缓存分为一级缓存和二级缓存。一级缓存是默认开启的,二级缓存需要手动开启。

一级缓存是SqlSession级别的缓存,作用域是一个SqlSession。在同一个SqlSession中,执行相同的查询sql,第一次会先去查询数据库,并写入缓存。第二次再执行时,则直接从缓存中取数据。如果两次执行查询sql的中间执行了增删改操作,则会清空该SqlSession的缓存。

二级缓存是mapper级别的缓存。作用域是是mapper的同一个namespace下的sql语句。第一次执行查询SQL时,会将查询结果存到二级缓存区域内。第二次执行相同的查询SQL,则直接从缓存中取出数据。如果两次执行查询sql的中间执行了增删改操作,则会清空该namespace下的二级缓存。

1、开启二级缓存

(1) 修改resources目录下的application.properties配置文件,加入开启mybatis二级缓存的配置和打印执行sql的配置

# 开启mybatis的二级缓存
mybatis.configuration.cache-enabled=true

# 开启sql打印
logging.level.com.batis.mapper=debug

(2) 修改resources目录下mapping目录对应的Mapper文件

<!-- 开启二级缓存 -->
<cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024">
</cache>

说明:
eviction: 回收策略
LRU 最近最少使用的,移除最长时间不被使用的对象,这是默认值
FIFO 先进先出,按对象进入缓存的顺序来移除它们
SOFT 软引用,移除基于垃圾回收器状态和软引用规则的对象
WEAK 弱引用,更积极的移除基于垃圾收集器状态和弱引用规则的对象

flushInterval: 刷新间隔,以毫秒为单位,100000表示每100秒刷新一次缓存。不设置的话,则每次调用语句时刷新。

readOnly: 只读属性可以被设置为true后者false。只读的缓存会给所有调用者返回缓存对象的相同实例,因此这些对象不能被修改,这提供了很重要的性能优势。可读写的缓存会通过序列化返回缓存对象的拷贝,这种方式会慢一些,但很安全,因此默认为false。

size: 可以被设置为任意的正整数,要记住缓存的对象数目和运行环境的可用内存资源数目,默认1024。

(3) 实体对象要implements Serializable,否则报错

public class User implements Serializable{ 
   

}

(4) 启动工程,如果出现

Cache Hit Ratio . #表示缓存开启了.....

2、启动batis项目并使用postman工具进行测试
查询用户:
在这里插入图片描述

打印sql日志,可以看到详细的查询过程(红框),第一次查询时调用了查询语句,后面绿框中的是多次查询,没有调用查询语句,而是直接取缓存的值;100秒之后再进行第二次查询,又重新调用了查询语句,并且多次查询后是从缓存取出值。:

插入用户并执行查询:
在这里插入图片描述

从上图的执行结果可以看到,先进行查询操作,查询结果更新到缓存,后面的几次查询都是直接从缓存取值。之后执行一个插入用户的操作,再多次执行查询操作的时候,会先调用一次查询语句将查询结果写入缓存,后面的几次操作就会直接从缓存取值。

至此Springboot集成Mybatis的二级缓存内容已经全部讲完,测试也都完全符合预期!
有可以改进的地方希望诸位同学不要吝惜笔墨,加以指正,万分感谢!

参考文章链接:https://blog.csdn.net/huanongying123/article/details/104293908

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191609.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SSM项目问题总结

    SSM项目问题总结1.导入一个新项目报错Theimportjavax.servlet.http.HttpServletRequestcannotberesolvedhttps://blog.csdn.net/nokia_lc/article/details/522047662.org.springframework.beans.factory.BeanDefinitionStoreException:…

  • 动态代理

    动态代理

  • 下载网页视频并自动合成视频[通俗易懂]

    下载网页视频并自动合成视频[通俗易懂]1.首先使用Chrome打开网页,单击F12打开开发者工具开始视频播放,在F12出来的界面中单击Network在Network中有文件列表,检查当中是否存在m3u8结尾的文件2.如果有m3u8结尾的文件,把它的源地址复制下来源地址复制下来可能分两段(两个http),一段是跳转地址,一段是目标地址,将目标地址保留下来即可。正确的m3u8文件地址大概的样子在下面的命令示例中…

  • realsense深度图像保存方法

    realsense深度图像保存方法一般使用realsense时会保存视频序列,当保存深度图像时,需要注意保存的图像矩阵的格式,不然可能造成深度值的丢失。在众多图像库中,一般会使用opencv中的imwrite()函数进行深度图像的保存。一般深度图像中深度值的单位是mm,因此一般使用np.uint16作为最终数据格式保存。例子:importnumpyasnpimportcv2deffun1(…

  • mybatis 缓存的使用, 看这篇就够了「建议收藏」

    mybatis 缓存的使用, 看这篇就够了「建议收藏」缓存的重要性是不言而喻的。使用缓存,我们可以避免频繁的与数据库进行交互,尤其是在查询越多、缓存命中率越高的情况下,使用缓存对性能的提高更明显。mybatis也提供了对缓存的支持,分为一级缓存和二级缓存。但是在默认的情况下,只开启一级缓存(一级缓存是对同一个SqlSession而言的)。以下的项目是在mybatis初步使用(IDEA的Maven项目,超详细)的基础上进行。…

  • 计算机二级python备考经验_计算机基础知识点

    计算机二级python备考经验_计算机基础知识点计算机二级于18年新增了Python栏目,我正好在上学期自学了Python语言。说实话,Python语言正的简洁强大,也是因为它让我改变了对编程的理解,当然还得感谢一位老师:北京理工的嵩天老师,他的网课很nice,也是他的讲解让我喜欢上了Python,喜欢上了编程,虽然之前有学过C/C++,web设计等语言,但有许多还是不够理解的。下面介绍正题:二级Python整体来说难度不大:20道选择…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号