hibernate一级缓存及二级缓存及ehcache的简单测试

vue高德地图POI关键字搜索定位 最近在项目中遇到了关于地图的问题,首先为了满足需求从而使用的是JSAPI为2.0版本的。需求是根据关键字搜索定位到该位置。值得注意的是在使用 AMap.Event.addListener时 Event一定要大写的E,不然页面会报错。在地图上定义一个输入框,根据输入的位置进行提示,然后点击后跳转到对应的位置并打点标记。JSAPI主要使用这两个。 阅读详情

hibernate一级缓存及二级缓存的区别

什么是缓存

缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用程序的运行性能。Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询,如果在缓存中找到了需要的数据(我们把这称做“缓存命中"),则就直接把命中的数据作为结果加以利用,避免了大量发送SQL语句到数据库查询的性能损耗。

一级缓存和二级缓存

一级缓存

一级缓存也称session缓存(事务缓存):hibernate内置的,不能卸除,只要使用了hibernate的session就会使用到缓存机制。

缓存范围

缓存只能被当前session对象使用,缓存的生命周期依赖于session的生命周期,当session关闭就会清理缓存,clear也能清理缓存,而evict方法可以清理指定的缓存。

二级缓存

二级缓存也称SessionFactory缓存(应用缓存):使用第三方插件,可插拔。

缓存范围

缓存被应用范围内的所有session共享,不同的Session可以共享。这些session有可能是并发访问缓存,因此必须对缓存进行更新。缓存的生命周期依赖于应用的生命周期,应用结束时,缓存也就结束了生命周期,二级缓存存在于应用程序范围。

缓存的应用场景?

例如很少修改或者根本不修改的数据

就像字典数据(数据庞大且较少更新)

耗时较高的统计sql,电话账单查询……

ehcache概念

ehcache是一个纯java的进程内缓存框架,具有配置简单、结构清晰、功能强大的特点。

而他的2.X版本和3.X相比而言,3.x的版本和2.x的版本API差异比较大。

本次介绍的是2.X版本。

ehcache的特点

够快、够简单、够袖珍、够轻量、好扩展、提供缓存管理器监听器、支持分布式缓存。

cacheManager(缓存管理器)的使用

缓存管理器内可以放置若干cache(缓存对象),存放数据的实质,所有cache都实现了Ehcache接口。

顺序层次:ehcache.xml->CacheManager->Cache->Element(javabean),缓存对象及其属性都可序列化。

ehcache的使用

导入相关依赖:

pom.xml

需要去中央仓库中寻找其jar包依赖(注意ehcache是net相关的那一个,不是org相关的ehcache):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.wangqiuping</groupId>
  <artifactId>Cache</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>hibrenate Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <!--相关版本的配置-->
  <properties>
  	<servlet.version>4.0.1</servlet.version>
  	<junit.version>3.8.1</junit.version>
  	<MySQL.version>5.1.44</MySQL.version>
  	<jstl.version>1.2</jstl.version>
  	<hibernate.version>5.2.12.Final</hibernate.version>
  	<ehcache.version>2.10.0</ehcache.version>
  </properties>
  
<dependencies>
<!-- servlet -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>${servlet.version}</version>
    <scope>provided</scope>
</dependency>  	
  	
<!-- junit -->
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
  </dependency>
  
  <!-- MySQL -->
  <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${MySQL.version}</version>
</dependency>

 <!-- jstl-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>${jstl.version}</version>
</dependency>

<!-- taglibs-->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

<!-- tomcat -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jsp-api</artifactId>
    <version>8.5.56</version>
</dependency>

<!--hibernate-->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>${hibernate.version}</version>
</dependency>

<!--ehcache-->
<dependency>
    	<groupId>net.sf.ehcache</groupId>
      <artifactId>ehcache</artifactId>
      <version>${ehcache.version}</version>
    </dependency>
<!-- ehcache与hibernate的桥接包 -->
 <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-ehcache</artifactId>
     <version>5.2.12.Final</version>
   </dependency>
    
<!-- log配置:Log4j2 + Slf4j -->
<!-- slf4j核心包 -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>1.7.7</version>
</dependency>

<!-- slf4j相关依赖-->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>jcl-over-slf4j</artifactId>
	<version>1.7.7</version>
	<scope>runtime</scope>
</dependency>

<!--用于与slf4j保持桥接 -->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-slf4j-impl</artifactId>
	<version>2.9.1</version>
</dependency>

<!--核心log4j2jar包 -->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>2.9.1</version>
</dependency>

<!--核心log4j2j相关依赖 -->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>2.9.1</version>
</dependency>

<!--web工程需要包含log4j-web,非web工程不需要 -->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-web</artifactId>
	<version>2.9.1</version>
	<scope>runtime</scope>
</dependency>

<!--需要使用log4j2的AsyncLogger需要包含disruptor -->
<dependency>
	<groupId>com.lmax</groupId>
	<artifactId>disruptor</artifactId>
	<version>3.2.0</version>
</dependency>
  
</dependencies>
<build>
  <finalName>Cache</finalName>
  <plugins>
  	<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<version>3.7.0</version>
	<configuration>
		<source>1.8</source>
		<target>1.8</target>
		<encoding>UTF-8</encoding>
	</configuration>
</plugin>
  </plugins>
</build>
</project>

接下来是配置缓存文件参数(ehcache.xml):

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
 updateCheck="false">
         
 <diskStore path="java.io.tmpdir"/>

 <defaultCache eternal="false"   
   maxElementsInMemory="1000" 
   overflowToDisk="false" 
   diskPersistent="false" 
   timeToIdleSeconds="0" 
   timeToLiveSeconds="600" 
   memoryStoreEvictionPolicy="LRU"/>
                      
  <cache name="bookCache"  eternal="false" 
       maxElementsInMemory="100"
       overflowToDisk="false" 
       diskPersistent="false" 
       timeToIdleSeconds="0"
       timeToLiveSeconds="300" 
       memoryStoreEvictionPolicy="LRU"/>
</ehcache>

相关参数解释:

属性解释
diskStore指的是磁盘存储(将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存)
defaultCache默认的管理策略
path指定在硬盘上存储对象的路径
java.io.tmpdir默认的临时文件路径
eternal设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断
maxElementsInMemory在内存中缓存的element的最大数目
overflowToDisk如果内存中数据超过内存限制,是否要缓存到磁盘上
diskPersistent是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false
timeToIdleSeconds对象空闲时间(单位:秒),指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问
imeToLiveSeconds对象存活时间(单位:秒),指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问
memoryStoreEvictionPolicy缓存的3 种清空策略
FIFOfirst in first out (先进先出)
LFU缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存
LRUehcache 默认值,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存)
nameCache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里)

hibernate.cfg.xml中添加二级缓存配置

<!-- 开启二级缓存 -->
    <property name="hibernate.cache.use_second_level_cache">true</property>
      	
<!-- 开启查询缓存 -->
    <property name="hibernate.cache.use_query_cache">true</property>
      	
<!-- EhCache驱动 -->
    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

完整的hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- 数据库相关配置 -->
		<!-- 链接账户名称 -->
		<property name="connection.username">root</property>
		<!-- 链接账户密码 -->
		<property name="connection.password">123</property>
		<!-- 链接的绝对路径 -->
		<property name="connection.url">
			jdbc:mysql://localhost:3306/t243?useUnicode=true&amp;characterEncoding=UTF-8&amp;userSSL=false
		</property>
		<!-- 驱动的绝对路径 -->
		<property name="connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<!-- 数据库方言配置 -->
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect
		</property>
		<!-- 调试相关配置 -->
		<!-- hibernate运行过程是否展示自动生成的SQL代码 -->
		<property name="show_sql">true</property>
		<!-- 是否规范化输出SQL代码 -->
		<property name="format_sql">true</property>
		
		<!-- 开启二级缓存 -->
      	<property name="hibernate.cache.use_second_level_cache">true</property>
      	<!-- 开启查询缓存 -->
      	<property name="hibernate.cache.use_query_cache">true</property>
      	<!-- EhCache驱动 -->
      	<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
		
		<!-- 实体映射相关配置 -->
		<mapping resource="com/wangqiuping/entity/Book.hbm.xml"/>
		<mapping resource="com/wangqiuping/entity/Category.hbm.xml"/>
		
	</session-factory>
</hibernate-configuration>

需要的工具类:

EhcacheUtil

package com.zengjing.util;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import java.io.InputStream;

public class EhcacheUtil {

//定义的cachManager缓存管理器,用于存储Cache缓存对象
    private static CacheManager cacheManager;

    static {
        try {
        	//加载根路径下的ehcache.xml并转换为输入流
            InputStream is=EhcacheUtil.class.getResourceAsStream("/ehcache.xml");
            
            cacheManager = CacheManager.create(is);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private EhcacheUtil() {
    }
    /**
     * 往缓存管理器CachManager中指定存储对象Cache中存储数据
     * @param cacheName 缓存对象名
     * @param key		缓存元素名称
     * @param value	 	缓存元素的值
     */
    public static void put(String cacheName, Object key, Object value) {
        //根据缓存对象名获取缓存管理器中的指定缓存对象
    	Cache cache = cacheManager.getCache(cacheName);
        if (null == cache) {
            //以默认配置添加一个名叫cacheName的Cache
            cacheManager.addCache(cacheName);
            
            cache = cacheManager.getCache(cacheName);
        }
        //创建一个Element缓存元素,并将缓存元素添加到Cache缓存对象中
        cache.put(new Element(key, value));
    }

    /**
     * 根据缓存对象名获取缓存对象
     * @param cacheName 缓存对象名
     * @param key		缓存元素名称
     * @return
     */
    public static Object get(String cacheName, Object key) {
    	//根据缓存对象名获取缓存管理器中的指定缓存对象
    	Cache cache = cacheManager.getCache(cacheName);
        //根据缓存元素名称获取Cache缓存对象中存储的Element缓存元素
    	Element element = cache.get(key);
        return null == element ? null : element.getValue();
    }

    public static void remove(String cacheName, Object key) {
        Cache cache = cacheManager.getCache(cacheName);
        cache.remove(key);
    }
}

SessionFactoryUtils:

package com.zengjing.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class SessionFactoryUtils {

	private static final String 
			HIBERNATE_CONFIG_FILE="hibernate.cfg.xml";
	
	private static ThreadLocal<Session> threadLocal=
			new ThreadLocal<Session>();
	
	//创建数据库的会话工厂
	private static SessionFactory sessionFactory;
	
	//读取hibernate核心配置
	private static Configuration configuration;
	
	static {
		try {
			configuration=new Configuration();
			configuration.configure(HIBERNATE_CONFIG_FILE);
			//创建Session会话工厂
			sessionFactory=configuration.buildSessionFactory();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static Session openSession() {
		Session session = threadLocal.get();
		if(null==session) {
			session=sessionFactory.openSession();
			threadLocal.set(session);
		}
		return session;
	}
	
	public static void closeSession() {
		Session session = threadLocal.get();
		if(null!=session) {
			if(session.isOpen())
				session.close();
			threadLocal.set(null);
		}
	}
	
	public static void main(String[] args) {
		Session session = SessionFactoryUtils.openSession();
		System.out.println("Session状态:"+session.isOpen());
		System.out.println("Session会话已打开");
		SessionFactoryUtils.closeSession();
		System.out.println("Session会话已关闭");
	}
}

需要的实体类(book):

package com.zengjing.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Book implements Serializable {
	
	private Integer bookId;
	private String bookName;
	private Float price;
	Set<Category> categories=new HashSet<Category>();
	
	public Set<Category> getCategories() {
		return categories;
	}
	public void setCategories(Set<Category> categories) {
		this.categories = categories;
	}
	public Integer getBookId() {
		return bookId;
	}
	public void setBookId(Integer bookId) {
		this.bookId = bookId;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public Float getPrice() {
		return price;
	}
	public void setPrice(Float price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Book [bookId=" + bookId + ", bookName=" + bookName + ", price=" + price + "]";
	}
}

需要的实体类(Category):

package com.zengjing.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;


public class Category implements Serializable {
	
	private Integer categoryId;
	private String categoryName;
	Set<Book> books =new HashSet<Book>();
	
	public Set<Book> getBooks() {
		return books;
	}
	public void setBooks(Set<Book> books) {
		this.books = books;
	}
	public Integer getCategoryId() {
		return categoryId;
	}
	public void setCategoryId(Integer categoryId) {
		this.categoryId = categoryId;
	}
	public String getCategoryName() {
		return categoryName;
	}
	public void setCategoryName(String categoryName) {
		this.categoryName = categoryName;
	}
	@Override
	public String toString() {
		return "Category [categoryId=" + categoryId + ", categoryName=" + categoryName + ", books=" + books + "]";
	}
}

指定的实体映射文件中开启二级缓存,例如我的book开启二级缓存(book.hbm.xml):

usage:缓存模式 region:定义缓存对象的名称Cache

<cache usage="read-only" region="com.zengjing.entity.Book"/>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.zengjing.entity.Book" table="t_book_hb">
	
		 <cache usage="read-only" region="com.zengjing.entity.Book"/>	
		
		<id name="bookId" type="java.lang.Integer" column="book_id">
			<generator class="increment"></generator>
		</id>
		<property name="bookName" type="java.lang.String" column="book_name"/>
		<property name="price" type="java.lang.Float" column="price"/>
		<!-- 多对多映射关系 -->
		<!-- 
			name:一方包含多方的属性对象名称,指向多方
			cascade:级联操作 save-update/none/delete/all=delete+save-update
			inverse:是否是主控方, false表示对方不是主控方
							  true表示对方是主控方,由对方来维护中间表
		 	table:表示中间表的名称
		 -->
		<set name="categories" 
		 	 cascade="save-update"
		 	 inverse="false"
		 	 table="t_book_category_hb">
		 	 <!-- 
		 	 	column:指向己方在中间表中的外键字段
		 	  -->
			<key column="bid"></key>
			<!-- 
				class:对方实例完整路径
				column:对方在中间表中的外键字段
			 -->
			<many-to-many class="com.zengjing.entity.Category"
						  column="cid">
			</many-to-many>
		</set>
	</class>
</hibernate-mapping>

bookDao:

package com.zengjing.dao;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.zengjing.entity.Book;
import com.zengjing.util.SessionFactoryUtils;

public class BookDao {

	public Book get(Book book) {
		Session session = SessionFactoryUtils.openSession();
		Transaction ts = session.beginTransaction();
	    //CRUD
		Book b = session.get(Book.class, book.getBookId());
		ts.commit();
		SessionFactoryUtils.closeSession();
		return b;
	}
	
	public List<Book> list() {
		Session session = SessionFactoryUtils.openSession();
		Transaction ts = session.beginTransaction();
	    //CRUD
		 Query query = session.createQuery(" from Book ");
		 query.setCacheRegion("com.zengjing.entity.Book");// 指定缓存策略,名字必须实体类的完整类名!!!
		 query.setCacheable(true);// 手动开启二级缓存!!!
		 List<Book> list = query.list();
		 ts.commit();
		 SessionFactoryUtils.closeSession();
		 return list;
	}
}

Juint测试:

package com.zengjing.dao;

import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.zengjing.entity.Book;

public class BookDaoTest {

	Book  book=null;
	BookDao  bookDao=new BookDao();
	
	
	@Before
	public void setUp() throws Exception {
	  book=new Book();
	}
    //查询单个
	@Test
	public void test() {
		book.setBookId(1);
		Book b1 = bookDao.get(book);
		System.out.println(b1);
		System.out.println("-------------------------------------");
		Book b2 = bookDao.get(book);
		System.out.println(b2);
	}
	
	//查询全部
	@Test
	public void testAll() {
		List<Book> list = bookDao.list();
		list.forEach(b->{
			System.out.println(b);
		});
		System.out.println("-------------------------------------");
		List<Book> lst = bookDao.list();
		lst.forEach(b->{
			System.out.println(b);
		});
	}
}

单个查询结果(我上方测试获取了两次单个查询的数据,但是下方结果SQL语句只查询了一次,说明第二次是从缓存中获取到的):

在这里插入图片描述
查询全部结果也是同上的查询SQL只有一次,但是获取数据两次都能获取到,第二次也是从缓存中获取的!

基于YOLOv11的工业零件表面缺陷检测系统:从原理到实现 工业质量控制是制造业的核心环节,表面缺陷检测作为其中重要组成部分,直接关系到产品质量和企业效益。本文详细介绍了一种基于YOLOv11深度学习算法的工业零件表面缺陷检测系统,包含完整的算法原理分析、数据集构建方法、模型训练策略以及用户界面设计。通过大量实验验证,该系统能够高效准确地检测零件表面的划痕、凹陷、锈蚀等多种缺陷,检测精度达到96.2%,满足工业实时检测需求。本文还提供了完整的代码实现和详细的技术文档,为相关领域的研究者和工程师提供参考。关键词:表面缺陷检测;YOLOv11;深度学习;工业视觉; 阅读详情

相关推荐

别再只调电位器了!用单片机PWM控制LM317输出电压,精度和玩法都多了

本文探讨了如何利用单片机PWM控制LM317输出电压,替代传统的电位器调节方案。通过PWM信号的有源滤波和运放处理,实现了更高精度(±5mV)、更好温度稳定性(0.01%/°C)的数控稳压电源设计,支持远程控制和可编程曲线输出,为经典电路注入数字化智能。

weixin_29164497的博客 356

mybatis入门学习(八) -一级缓存与二级缓存以及ehcache

一级缓存 mybatis默认开启一级缓存,缓存存放在内存中,再次执行相同sql时会从 sqlsession 中提取数据; 当 sqlsession 调用 commit()则释放缓存;同一个 sqlsession 共享一级缓存(mapper接口的代理对象不变) 测试类: public static void main(String[] args) { try { InputStream inputStream = Resources.getResourceAsStrea

weixin_43520586的博客 162

淘宝电商产品价格官方防爬取采集设计机制,如何破?|淘宝电商API数据采集看完你也会!

然而,随着电子商务的蓬勃发展,涌现出大量的第三方工具和应用,试图通过采集淘宝电商产品价格等信息来进行数据分析和竞争优势的获取。为了维护市场秩序和保护商家权益,淘宝采取了一系列的防爬取设计机制,以阻止非授权的数据采集行为。为了确保数据的准确性和及时性,淘宝采取了多层次的防爬取机制,以限制未经授权的数据采集。其它的情况,比如淘宝首页、淘宝关键词商品搜索结果页面、商品详情页面,都是正常展示,未实现加密;也可以使用【tesseract ocr识别】指令,这个是免费无限使用的;【淘宝商品搜索结果页面-本地截图】

TinagirlAPI的博客 1385

hibernate二级缓存测试

SessionFactory类: import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.stat.Statistics;public class HibernateSessionFactory {

tuoxinquyu的专栏 2070

SPWM波调制度原理

SPWM波调制度原理

qq_43557686的博客 1万+

深入解析DDR5 SDRAM中的CA训练模式(CATM):原理与实现

本文深入解析DDR5 SDRAM中的CA训练模式(CATM),详细探讨其工作原理与实现方法。通过分析JESD79-5标准,揭示CATM在时序校准、信号质量优化和系统稳定性方面的核心价值,并提供硬件设计考量和系统级调试技巧,帮助工程师解决高速内存系统中的信号完整性问题。

weixin_29235923的博客 383

Hibernate的一级二级缓存机制配置与测试

特别感谢http://www.cnblogs.com/xiaoluo501395377/p/3377604.html   在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别)、二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题。   随笔虽长,但我相信看完的朋友绝对能对hibernate的 N+1问题以及缓存...

weixin_30822451的博客 134

Django框架中settings文件的部署建议

为了更好地管理开发和生产环境的配置,建议将settings文件分为多个文件,分别用于不同的环境。然后,通过在启动应用程序时指定不同的settings文件,来加载相应的配置。在Django框架中,settings.py文件是非常重要的配置文件,它包含了项目的各种设置和选项。在Django框架中,settings.py文件是非常重要的配置文件,它包含了项目的各种设置和选项。可以使用Python的。为了更好地管理开发和生产环境的配置,建议将settings文件分为多个文件,分别用于不同的环境。

WELL_CODER的博客 128

测试hibernate的二级缓存(二)

hibernate的二级缓存的测试类: package com.echo.cache2; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.h

wuliEcho的博客 557

【软件系统架构】系列六:MBSE(基于模型的系统工程)

基于模型的系统工程(MBSE)是一种以模型为核心的系统工程方法论,通过结构化、可视化的模型取代传统文档,实现从需求到验证的全生命周期管理。MBSE采用SysML建模语言,包含需求、功能、架构和验证四大要素,支持自动追踪、仿真分析和代码生成。相比文档式工程,MBSE具有变更影响自动分析、跨团队协作和高可视化等优势,广泛应用于航空航天、汽车电子等领域。典型开发流程包括需求建模、行为建模、架构建模等阶段,配合MagicDraw、Cameo等工具链实现。MBSE正与数字孪生、AI技术融合,推动自动化建模和智能验证的

moton2017的博客 2783

论文阅读:NeurIPS 2024 JailbreakBench: An Open Robustness Benchmark for Jailbreaking Large Language Model

论文指出评估越狱攻击存在挑战,如缺乏评估标准、成本和成功率计算方法不一致、许多研究无法复现。为解决这些问题,作者提出了JailbreakBench,这是一个开源基准测试,包含以下组件:持续更新的越狱提示库(jailbreak artifacts)。包含100种行为的越狱数据集,符合OpenAI的使用政策。标准化的评估框架,包括威胁模型、系统提示、聊天模板和评分函数。跟踪各种LLMs攻击和防御性能的排行榜。

CSPhD-winston的博客 1431

hibernate框架学习之二级缓存(测试用例)

HqlDemoApp.java package cn.itcast.h3.query.hql; import java.io.Serializable; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import cn.itcast....

weixin_30670965的博客 110

配置适合Gurobi的机器硬件环境需要考虑的因素

介绍了在为gurobi选择合适的硬件环境时,需要考虑三个方面的因素;

Linshaodan520的博客 1063

Hibernate之二级缓存

Hibernate之二级缓存什么是Hibernate的缓存 什么是Hibernate的缓存 Hibernate提供了一级缓存和二级缓存,合理的利用缓存可以有助于提高系统的性能,为了避免不合理的利用缓存导致内存过度消耗降低系统性能,可以通过合理配置缓存的参数来避免这个问题。 缓存的目的是为了通过减少应用程序对物理数据访问的次数来提高程序运行的效率,原理则是把当前或接下来一段时间有可能会用到的数据保存...

what_to的博客 257

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

hibernate整合Ehcache 实现二级缓存

一.hibernate缓存 有一级缓存、二级缓存。 目的是为了减少对数据库的访问次数,提升程序执行效率! 1 一级缓存 session Hibernate默认是开启一级缓存的,是基于Session的缓存,缓存内容只在当前session有效,session关闭,缓存内容失效! 特点: 作用范围较小! 缓存的事件短。 缓存效果不明显。 2 二级缓存 (可拔插式,可开可不开) hibernate...

Soul717的博客 2020

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

hibernate5二级缓存配置

hibernate默认有一个一级缓存,就是默认的Session缓存,当我们做了一次查询,hibernate会把这个结果缓存起来,叫做一级缓存,当我们接着在这个Session会话里面再做一次同样条件的查询,hibernate不会再次查询数据库,而是直接在一级缓存中获取结果并返回。一级缓存是内置的,他也不能被卸载。一级缓存是指在同一个Session会话内的查询做的缓存,如果跨了Session,或者当前...

feinifi的博客 2749

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Hibernate EHCache - Hibernate二级缓存

Hibernate EHCache - Hibernate二级缓存 欢迎使用Hibernate二级缓存示例教程。今天我们将研究Hibernate EHCache,它是最受欢迎的Hibernate二级缓存提供程序。 目录[隐藏] 1 Hibernate 二级缓存 2Hibernate EHCache 2.1Hibernate EHCache Maven依赖项 2.2...

YunWisdom 616

Hibernate缓存(EhCache)

Hibernate缓存(EhCache)

weixin_52457750的博客 1290

hibernate的二级缓存

hibernate的二级缓存前言Ehcache二级缓存的配置1、导入相关依赖总结 前言 Ehcache二级缓存的配置 1、导入相关依赖 pom.xml文件 当然这些需要导入的jar包依赖代码不需手写,只需去 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or

月亮投递员的博客 650

maven工程中hibernate的二级缓存ehcache的配置

说到缓存对于新手来说可能是一件很头疼的事儿,做为新手的我,今天给大家分享下自己的学习过程。最近项目中用到了可配置参数,这类参数基本无需修改,除了新增,刚开始是自己写了一个mapCache,就是用ConcurrentHashMap在系统启动时将所有数据缓存到map中,这样避免了系统运行时频繁访问数据库查询。但是这里有个缺点,如果系统启动后在管理平台新增参数那么新增的参数不会在map中,业务系统必须重

qq_34636263的博客 1709

Hibernate整合EHCache实现二级缓存

在《》教程介绍的几种常用的二级缓存插件中,EHCache 缓存插件是理想的进程范围的缓存插件。本小节将以 EHCache 缓存插件为例,介绍二级缓存的配置和使用。

unber的博客 374

SpringBoot 2.0.4 使用Ehcache作为Hibernate的二级缓存和系统缓存

本文基于springboot 2.0.4 使用ehcache作为Hibernate的二级缓存 以及系统缓存 额外需要用的是mysql数据库 由于springboot2.x和1.x差别较大 使用1.x可能会有错误 另外ehcache版本也会导致有不同的问题 本文默认使用了spring-boot-starter-cache里面的ehcache 首先 先看一下POM文件的配置 &amp;amp;amp;lt;?xm...

yingziisme的博客 5111

Hibernate二级缓存设置

Hibernate二级缓存设置 二级缓存是SessionFactory层面的缓存并被所有的Session共享,故不像一级缓存Session一样需要调用flush进行清理(没有临时集合),但使用二级缓存必须配置外置的二级缓存插件,常见的二级缓存插件有 Ehcache OSCache JBoss Cache Infininspan 以常用的Ehcache为例(Hibernate版本5.5) 二级缓存的并发访问策略 1.准备相关的jar包,配置 net.sf.ehcache

jamenu的博客 764

Hibernate的二级缓存

一、概述     Hibernate包括两个级别的缓存:默认总是启用的Session级别的一级缓存和可选的SessionFactory级别的二级缓存。     其中,Session级别的一级缓存默认总是有效的,当应用保存持久化实体、修改持久化实体时,Session并不会立即把这种改变flush到数据库,而是缓存在当前Session的一级缓存中,除非程序显式调用Session的flush方法

敬天爱人 827

hibernate的二级缓存与ehcache

二级缓存与ehcache二级缓存ehcacheehcache的特点ehcache的使用hibernate缓存hibernate(5.2.12.Final)中使用二级缓存步骤(ehcache)辅助类 二级缓存 为什么需要缓存 拉高程序的性能 什么样的数据需要缓存 很少被修改或根本不改的数据 字典数据 业务场景比如:耗时较高的统计分析sql、电话账单查询sql等 ehcache ehcache是什么 Ehcache 是现在最流行的纯Java开源缓存框架,配置简单、结构清晰、功能强大 注1:本章介绍的

TZyybhs的博客 277

hibernate项目中怎么使用ehcache缓存

maven项目中使用hibernate和ehcache缓存maven项目配置ehcache依赖添加ehcache.xml在hibernate中添加二级缓存的相应配置使用ehcache ehcache缓存有助于减少程序负担,提高程序性能,现在就来总结一下学到的ehcache缓存使用。 maven项目配置ehcache依赖        上篇的博客说了怎么配置maven项目,这样的话,配置ehcache的依赖也就是引入jar包,就容易很多了。

qq_46119030的博客 737
上一篇: hibernate入门(加载策略、管理对象、一级缓存及快照)
下一篇: Hibernate的一对多映射
Jiang呀
博客等级 码龄7年 16粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值