按照https://my.oschina.net/u/1469930/blog/388004 配置好,但是不知道配置的二级缓存是否起作用;
用不同的浏览器打开同一个链接,调用相同的方法,tomcat容器的session会话不同,但是相同的查询,只像数据库请求了一次SQL.
准备工作:
1.打开mysql的log,windows和linux不一样哈,目的是为了查看请求时,向数据库发了SQL查询没;
windows
[mysqld] # [mysqld] 下添加日志在H盘 log-error="H:\mysql_log\error.log" log="H:\mysql_log\mysql.log" long_query_time=2 log-slow-queries="H:\mysql_log\slowquery.log"
linux
# 在[mysqld] #log log-error=/usr/local/mysql/log/error.log log=/usr/local/mysql/log/mysql.log long_query_time=2 log-slow-queries= /usr/local/mysql/log/slowquery.log
2.分别在没有配置缓存和配置了缓存的情况下,不同浏览器访问相同链接,代码中打印时间,同时观察mysql的日志变化,linux用tail -f ,windows用监控文本变化的工具,比如UE,notepade++(高版本),wintalk.ext
得出结论
1.在mapper中关闭了2级缓存
浏览器请求不同的session;点击一次发送一次sql到数据库;SqlSession一致;
2.在mapper中开启了2级缓存
不同浏览器相同请求,数据库日志只有第一次发出了sql查询,第一次耗时多,以后几乎耗时为0毫秒;
3.配置:
pom.xml
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.4.6</version> </dependency> <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.2.4.RELEASE</version> </dependency>
ehcache.xml
<?xml version="1.0" encoding="utf-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd"> <diskStore path="java.io.tmpdir"/> <defaultCache maxElementsInMemory="100000" maxElementsOnDisk="300000" eternal="false" timeToIdleSeconds="1800" timeToLiveSeconds="3600" overflowToDisk="true" memoryStoreEvictionPolicy="LFU"/> <!-- 配置自定义缓存 maxElementsInMemory | 设置基于内存的缓存可存放对象的最大数目 maxElementsOnDisk | 设置基于硬盘的缓存可存放对象的最大数目 eternal | 如果为true,表示对象永远不会过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false timeToIdleSeconds | 设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,如果处于空闲状态的时间超过了就clear cache, 只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地处于空闲状态 timeToLiveSeconds | 设定对象允许存在于缓存中的最长时间,以秒为单位。当对象自从被存放到缓存中后,如果处于缓存中的时间超过了 timeToLiveSeconds属性值, 这个对象就会过期。当对象过期,EHCache将把它从缓存中清除。只有当eternal属性为false,该属性才有效。如果该属性值为0, 则表示对象可以无限期地存在于缓存中。timeToLiveSeconds必须大于timeToIdleSeconds属性,才有意义。 overflowToDisk | 如果为true,表示当基于内存的缓存中的对象数目达到了maxElementsInMemory界限后,会把益出的对象写到基于硬盘的缓存中。 注意:如果缓存的对象要写入到硬盘中的话,则该对象必须实现了Serializable接口才行。 memoryStoreEvictionPolicy | 缓存对象清除策略。有三种: FIFO ,first in first out LFU , Less Frequently Used ,缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存,使用得少的就会被清出 LRU ,Least Recently Used ,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓 存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。 --> </ehcache>
**Mapper.xml
<!-- ehcache缓存 --> <!-- <cache type="org.mybatis.caches.ehcache.EhcacheCache" /> --> <cache type="org.mybatis.caches.ehcache.LoggingEhcache"> <property name="timeToIdleSeconds" value="3600"/> <property name="timeToLiveSeconds" value="3600"/> <property name="maxEntriesLocalHeap" value="1000"/> <property name="maxEntriesLocalDisk" value="10000"/> <property name="memoryStoreEvictionPolicy" value="LRU"/> </cache>
注入spring
<!-- 使用ehcache缓存 --> <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation" value="classpath:ehcache.xml" /> </bean>
可以用flushcache() userCache()配合着查看区别。
相关推荐
在本篇《Mybatis入门实例(二)——添加ehcache缓存支持》中,我们将深入探讨如何在Mybatis框架中集成Ehcache作为二级缓存,以提高数据访问的效率和性能。Ehcache是一个开源的Java分布式缓存,广泛用于缓存应用程序中...
spring springmvc mybatis shiro 以及 ehcache(配合shiro实现缓存验证 配合spring实现二级缓存) 测试 二级缓存 访问http://localhost:8080/vkblog/test/ehcacheuserlist.action 测试 访问限制 访问任意的action
集成MyBatis和Ehcache时,我们需要在MyBatis的全局配置文件(`mybatis-config.xml`)中指定`ehcache.xml`的位置,并启用二级缓存: ```xml ... <cache type="org.mybatis.cache.ehcache.EhcacheCache"> ...
1. **缓存开启与配置**:确认Mybatis配置文件中是否开启了二级缓存,以及对应的Mapper文件中是否有相应的缓存配置。 2. **缓存读写测试**:编写测试用例,模拟读取和写入操作,验证缓存是否能正确地存储和返回数据...
在本例中,我们使用 EHCache 作为 MyBatis 的二级缓存实现。 **Oracle** 是一个关系型数据库管理系统,广泛应用于企业级应用中。本文将介绍如何在 Oracle 10g 数据库中使用 MyBatis 和 EHCache 实现数据持久化,并...
- **mybatis-ehcache-1.0.3.jar**:Mybatis与Ehcache的集成库,让Mybatis可以利用Ehcache进行二级缓存。 - **spring-beans-4.2.5.RELEASE.jar**:Spring框架的核心模块,包含了Bean工厂和依赖注入等功能。 - **shiro...
- **7.6 二级缓存局限性**:讨论二级缓存可能存在的问题,如并发更新问题等。 #### 六、Spring 和 MyBatis 整合 - **8.1 整合思路**:利用Spring管理MyBatis的生命周期,简化开发流程。 - **8.2 整合环境**:搭建...
《Java EE企业级应用开发教程Spring+Spring MVC+MyBatis》是一本深入探讨Java企业级应用程序开发的书籍,源代码包含多个章节的实例,旨在帮助读者理解和掌握使用Spring、Spring MVC和MyBatis框架进行实际开发的关键...
- **开启二级缓存**:配置文件中的设置。 - **实现序列化**:满足二级缓存的要求。 - **测试**:验证缓存的有效性。 - **禁用二级缓存**:特定情况下的关闭方法。 - **刷新缓存**:清理缓存数据。 - **Mybatis...
在 SpringBoot 中,需要配置 MyBatis 相关的 Starter,并在 MyBatis 的配置中指定 Redis 或 Ehcache 作为二级缓存。 8. **测试与调试**:编写测试用例,验证缓存功能是否正常工作。你可以检查缓存命中率、存取速度...
配置druid数据源监视: ehcache二级缓存配置xml注解ftp服务; Excel相关处理; jmx监控MBean测试; ArchUnit参数验证;跨域处理; shiro权限控制;静态资源,“ /”映射服务启动注册到consul;并测试获取redis服务,...
23.ehcache 自定义二级缓存 ,选择缓存存放目录,处理并发,增加系统性能 24.服务器内部GET POST 请求 25.uploadify 上传插件,单条、批量上传,带进度条,异步,图片、视频, 其它文件格式均可上传 26.地图选点获取...
在缓存层面,Ehcache作为Shiro的一级缓存,而Jedis则用于Redis的二级缓存。Dubbo和RSF用于实现服务的分布式,RabbitMQ处理消息队列,Quartz实现定时任务,Elasticsearch用于全文搜索引擎,FastDFS支持文件存储,这些...
- **缓存**: Redis(高性能的key-value存储系统)、ehcache(Java平台上的缓存实现)。 - **消息中间件**: ActiveMQ(基于AMQP协议的消息中间件)。 - **负载均衡**: Nginx(高效反向代理服务器)。 - **分布式...
- 二级缓存:作用于SessionFactory级别,可供多个Session共享。需手动开启,默认使用EhCache实现。二级缓存中数据的修改需要同步到数据库,避免并发问题。 4. Hibernate的懒加载(Lazy Loading): 懒加载是一种...
- **二级缓存**:作用于SessionFactory范围,可被所有Session共享。默认关闭,需手动开启,通常使用ehcache实现。需要注意数据的并发修改问题。 - **懒加载**:延迟加载策略,只有在实际需要时才查询数据库,提高...
在SSM项目中,Ehcache可能被用作二级缓存,存储一些频繁访问的数据,如查询结果,以减轻数据库压力。 这个"SSM框架+shiro+ecache整合"项目提供了一个完整的解决方案,适用于需要进行复杂业务逻辑处理和高安全性需求...
权限管理方面,框架基于Shiro进行了深度定制,实现了Ehcache的一级缓存和Redis的二级缓存,支持session同步。权限控制深入到按钮和方法级别,且有三套独立的验证体系,分别对应平台、商家和会员,便于权限的分级管理...
6. 缓存管理:Shiro支持Redis、Ehcache等多种缓存机制,通过`CacheManager`接口实现缓存的配置,提高性能。 7. Mybatis-Generator整合:配置generator-config.xml,指定数据库连接信息、生成的Java文件位置等,然后...