Hibernate通过配置项 hibernate.cache.provider_class 来指定所采用的Cache API,但是在Hibernate所提供对缓存操作方法都是一些高层的API,也就是说Hibernate提供对缓存的操作方法都是基于对象的操作,例如
session.evict(Object obj);
SessionFactory.evictXxxx
但有时候这些方法并不能完成我们想要的功能时,因此我们需要直接操控缓存来达到我们想要的目的。
挨个打开Hibernate的源代码发现了有一个类Settings,这个类有一个getCacheProvider方法,而通过SessionFactoryImpl类可以获取Settings的实例。从字面上来可以猜出SessionFactoryImpl就是对接口SessionFactory的实现,而getCacheProvider就是用来获取缓存管理器的实例,经过一番试验证实了以上猜测。
接下来可以在Hibernate的初始化时做点手脚来获取CacheProvider实例:
Configuration cfg = new Configuration().configure(cfg_path);
//将buildSessionFactory返回的对象强制转为SessionFactoryImpl类型
SessionFactoryImpl sessionFactory = (SessionFactoryImpl)cfg.buildSessionFactory();
this.cacheProvider = sessionFactory.getSettings().getCacheProvider();
这样我们就拿到了CacheProvider实例,接下来再看看CacheProvider接口,该接口是通过buildCache(String name, Properties props)方法来创建缓存的
也就是说我们还需要一个参数就是props,这个参数就是Hibernate的配置信息,再次阅读SessionFactoryImpl源码便可知道通过Configuration类来获取配置信息
所以最终完整的代码是:
Configuration cfg = new Configuration().configure(cfg_path);
SessionFactoryImpl ssnFactory = (SessionFactoryImpl)cfg.buildSessionFactory();
CacheProvider cacheProvider = ssnFactory.getSettings().getCacheProvider();
Cache cache = cacheProvider.buildCache("cache_name", cfg.getProperties());
cache.get(xxxxx);
cache.set(xxxx,xxxx);
分享到:
相关推荐
以EhCache为例,我们需要在项目中引入ehcache-core或ehcache的依赖,并在Hibernate配置文件(hibernate.cfg.xml或persistence.xml)中启用二级缓存,添加如下配置: ```xml <property name="hibernate.cache.use_...
4. **Ehcache配置**:创建`ehcache.xml`文件,定义缓存策略和大小限制。例如: ```xml xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> maxEntriesLocalHeap="1000" eternal="false...
4. **缓存策略**:可以配置缓存更新策略,比如定时刷新、脏数据检测等,以确保缓存中的数据及时更新。 5. **查询缓存**:除了对象级别的缓存,还可以配置查询缓存,将 SQL 查询结果缓存起来,减少对数据库的访问。...
在Java的持久化框架Hibernate4中,二级缓存是一个重要的性能优化工具,它能够显著提升数据访问速度,减少对数据库的直接操作。二级缓存主要分为查询缓存和集合缓存,通过缓存中间结果,避免了多次重复的数据库查询。...
例如,在获取实体时,如果该实体已经在缓存中,Hibernate会直接从缓存中读取,避免了数据库查询。 总结来说,为Spring集成的Hibernate配置二级缓存涉及到引入缓存提供者依赖、修改Hibernate和Spring配置文件、在...
这里它被用作Hibernate二级缓存的实现方式,这意味着当数据首次从数据库中读取后,会被存储在memcached中,后续请求可以直接从缓存中获取,避免了频繁的数据库交互,从而提高了系统的响应速度。 **知识点详解:** ...
当相同的数据再次被请求时,可以从缓存中快速获取,提高系统响应速度。在不使用缓存的情况下,可以通过配置关闭。 5. **Fastjson**: Fastjson是阿里巴巴开源的一个高性能的JSON库,它能够将Java对象转换成JSON...
例如,如果使用Ehcache作为二级缓存实现,你需要引入`hibernate-ehcache`的jar包,并在Hibernate配置文件(如`hibernate.cfg.xml`)中进行配置。 配置二级缓存的步骤通常如下: 1. **引入依赖**:在项目构建工具...
4. 配置缓存策略:定义缓存区域,设置缓存策略(如过期时间、更新策略等)。 5. 应用到查询:对于查询结果,可以使用`SessionFactory.getCache()`方法获取二级缓存对象,然后进行相关的读写操作。 在源码实例中,...
Hibernate 是一个非常流行的开源对象关系映射(ORM)框架,它允许 Java 开发人员将数据库操作转换为面向对象的方式,从而简化了数据访问。在 Hibernate 中,缓存机制是提高性能的重要工具,尤其是在处理大量数据时。...
要使用EhCache,你需要下载相应版本并将其库文件添加到工程中,同时配置`ehcache.xml`文件以定义缓存策略,如缓存的最大元素数、是否持久化到磁盘、缓存的过期时间等。 在Spring框架中管理SessionFactory时,可以在...
在Hibernate中,一级缓存是每个Session级别的,它存储了当前Session中所有持久化对象的副本,当Session关闭时,一级缓存中的数据会被清除。而二级缓存是SessionFactory级别的,它可以跨Session共享,即使Session关闭...
3. **EhCache配置**:`ehcache.xml`文件是EhCache的配置文件,用于定义缓存策略,如缓存的最大大小、存活时间和过期时间等。配置中需要设置Hibernate特定的元素,如`<cache>`元素,指定实体类和缓存策略。 4. **...
在Hibernate配置文件(hibernate.cfg.xml)中,我们需要添加二级缓存插件的相关配置,例如Ehcache: ```xml <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache....
- **数据一致性问题**:由于二级缓存中的数据是数据库数据的副本,因此需要解决数据一致性的问题。通常情况下,可以通过配置缓存策略(如读写策略、刷新策略等)来保证数据的一致性和有效性。 - **性能优化**:合理...
2. **Ehcache配置**:在Hibernate配置文件中,我们需要指定使用Ehcache作为二级缓存提供者,并设置相应的配置参数,如缓存大小、过期策略等。此外,还需要在项目的类路径下放置Ehcache的配置文件,以定义具体的缓存...
- 如果二级缓存中有数据,则直接从二级缓存中获取;如果没有,则查询数据库并将结果存入二级缓存中。 ##### 2. 二级缓存策略 - **只读策略(ReadOnly)**:适用于只读操作的场景,可以显著提高性能。配置方式为:...
然后,我们需要创建一个ehcache.xml文件,定义缓存策略。例如: ```xml xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk...
当同一会话中的后续查询尝试访问这些对象时,可以直接从缓存中获取,避免了重复的数据库查询。 2. **第二级缓存**:这是SessionFactory级别的可选缓存,可以跨多个会话共享。它可以是进程内缓存(如EhCache)或...