精华内容
下载资源
问答
  • Java中的二级缓存
    2021-03-03 14:28:42

    2. Hibernate的Session 就是一种缓存,我们通常将之称为 Hibernate的 一级缓存,当想使用 session 从数据库中查询出一个对象时,Session 也是先从自己内部查看是否存在这个对象,存在则直接返回,不存在才去访问数据库,并将查询的结果保存在自己内部。

    由于 Session 代表一次会话过程,一个 Session 与一个数据库连接相关连,所以 Session 最好不要长时间保持打开,通常仅用于一个事务当中,在事务结束时就应关闭。

    并且 Session 是线程不安全的,被多个线程共享时容易出现问题。通常只有那种全局意义上的缓存才是真正的缓存应用,才有较大的缓存价值,因此,Hibernate 的 Session 这一级缓存的缓存作用并不明显,应用价值不大。

    Hibernate 的二级缓存就是要为 Hibernate 配置一种全局缓存,让多个线程和多个事务都可以共享这个缓存。我们希望的是一个人使用过,其他人也可以使用,session 没有这种效果。

    3. 二级缓存是独立于 Hibernate 的软件部件,属于第三方的产品,多个厂商和组织都提供有缓存产品,例如,EHCache 和 OSCache 等等。

    在Hibernate中使用二级缓存,首先就要在 hibernate.cfg.xml 配置文件中配置使用哪个厂家的缓存产品,接着需要配置该缓存产品自己的配置文件,最后要配置 Hibernate 中的哪些实体对象要纳入到二级缓存的管理中。

    明白了二级缓存原理和有了这个思路后,很容易配置起 Hibernate 的二级缓存。

    扩展知识:一个 SessionFactory 可以关联一个二级缓存,也即一个二级缓存只能负责缓存一个数据库中的数据,当使用 Hibernate 的二级缓存后,注意不要有其他的应用或 SessionFactory 来更改当前数据库中的数据,这样缓存的数据就会与数据库中的实际数据不一致。

    更多相关内容
  • Redis用作二级缓存

    2018-06-04 21:51:03
    这个主要是用作在Mybatis中的Mapping文件中的二级缓存
  • 主要介绍了Java的Hibernate框架中的缓存与二级缓存,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
  • 关于一级缓存和二级缓存 为了分清这两个概念,内存有RAM和ROM两种,我们先了解一下RAM(随机存储器) 和ROM(只读存储器). RAM和ROM相对的,RAM是掉电以后,其中信息就消失那一种,ROM在掉电以后信息也不会消失那一...

    首先补充下CPU的知识:

    CPU也就是中央处理器,相当于计算机的大脑;

    CPU是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit);

    CPU功能主要是解释计算机指令以及处理计算机软件中的数据;

    中央处理器主要包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus);

    CPU与内部存储器(Memory)和输入/输出(I/O)设备合称为电子计算机三大核心部件。

    什么是缓存和内存:

    什么是内存?

    内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的。

    什么是缓存?

    缓存是CPU的一部分,它存在于CPU中,CPU存取数据的速度非常的快,一秒钟能够存取、处理十亿条指令和数据(术语:CPU主频1G),而内存就慢很多,快的内存能够达到几十兆就不错了,可见两者的速度差异是多么的大。缓存是为了解决CPU速度和内存速度的速度差异问题。内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内存快很多。

    这里要特别指出的是:因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访问最频繁的。

    关于一级缓存和二级缓存

    为了分清这两个概念,内存有RAM和ROM两种,我们先了解一下RAM(随机存储器) 和ROM(只读存储器).

    RAM和ROM相对的,RAM是掉电以后,其中信息就消失那一种,ROM在掉电以后信息也不会消失那一种,RAM又分两种,

    一种是静态RAM:SRAM;一种是动态RAM:DRAM。前者的存储速度要比后者快得多,我们现在使用的内存一般都是动态RAM。

    有的菜鸟就说了,为了增加系统的速度,把缓存扩大不就行了吗,扩大的越大,缓存的数据越多,系统不就越快了吗.缓存通常都是静态RAM,速度是非常的快,但是静态RAM集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍),价格高(同容量的静态RAM是动态RAM的四倍),由此可见,扩大静态RAM作为缓存是一个非常愚蠢的行为,但是为了提高系统的性能和速度,我们必须要扩大缓存,这样就有了一个折中的方法,不扩大原来的静态RAM缓存,而是增加一些高速动态RAM做为缓存,这些高速动态RAM速度要比常规动态RAM快,但比原来的静态RAM缓存慢,我们把原来的静态ram缓存叫一级缓存,而把后来增加的动态RAM叫二级缓存。一级缓存和二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。

    通常CPU找数据或指令的顺序是:先到一级缓存中找,找不到再到二级缓存中找,如果还找不到就只有到内存中找了

    展开全文
  • 本篇文章中主要介绍了java中hibernate二级缓存详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Java二级缓存原理

    千次阅读 2018-12-10 10:18:10
    public class Demo1 { static Map<String, Object> map = new HashMap<>(); //没有,从数据库里拿;... static Object getValue(String key) { ... if (value == null)...
    public class Demo1 {
    
    	static Map<String, Object> map = new HashMap<>();
        //没有,从数据库里拿;没有,从内存里拿
    	static Object getValue(String key) {
    		Object value = map.get(key);
    		if (value == null) {
    			System.out.println("从数据库中获取符合条件的数据");
    			map.put(key, "从内存中获取符合条件的数据");
    			value = map.get(key);
    		}
    		return value;
    	}
    
    	/**
    	 * 
    	* @Title: main
    	* @Description: 1·数据库连接的占用问题减少了
    	* 				2·数据库压力小了
    	* 				3·内存的读写速度要远远快于硬盘的读写速度
    	* @param args
    	* @return void
    	 */
    	public static void main(String[] args) {
    		System.out.println(getValue("ss"));
    		System.out.println(getValue("ss"));
    
    	}
    }
    

     

    运行结果:

     

    展开全文
  • Hibernate 一级缓存和二级缓存的区别
  • Java二级缓存

    千次阅读 2018-03-16 15:06:08
    第一步所需导入架包log4j-api-2.10.0.jarlog4j-core-2.10.0.jarmybatis-3.4.1.jarmysql-connector-java-5.1.38.jar第步开始配置数据库的连接&lt;?xml version="1.0" encoding="UTF-8"?&...

    第一步

    所需导入架包

    log4j-api-2.10.0.jar

    log4j-core-2.10.0.jar

    mybatis-3.4.1.jar

    mysql-connector-java-5.1.38.jar

    第二步

    开始配置数据库的连接

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <!-- 整个配置文档会在和spring整合后废弃 -->

    <configuration>
        <settings>
            <setting name="logImpl" value="LOG4J2" />
            <setting name="cacheEnabled" value="true"/>  
        </settings>
        <!-- 配置数据库连接属性 environments:环境 -->
        <environments default="development">
            <!-- 配置数据库连接环境 -->
            <environment id="development">
                <!-- 此数据库连接使用的事务管理类型 JDBC:使用JDK提供的事务管理,对应实现类是:JdbcTransactionFactory MANAGED:不做任何事务功能,它就是一个托管标识;对应实现类是:ManagedTransactionFactory
                    内部实现:typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class); -->
                <transactionManager type="JDBC" />
                <!-- 此数据库连接使用的连接池 POOLED:使用连接池的方式,开发或测试环境经常使用 UNPOOLED:每次连接都需要打开和关闭,一般不使用。
                    JNDI:使用配置好的JNDI数据库连接方式,一般生产环境使用较多 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/base" />
                    <property name="username" value="root" />
                    <property name="password" value="admin" />
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="com/aaa/mapper/faculty.xml"></mapper>
            <mapper resource="com/aaa/mapper/StudentDao.xml"></mapper>
        </mappers>

    </configuration>

    第三步(文件放在src根目录问件下)

    日志配置

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="INFO" monitorInterval="1800">
        <appenders>
            <Console name="consolePrint" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
            </Console>
        </appenders>

        <loggers>
            <!-- 将业务dao接口填写进去,并用控制台输出即可 -->
            <logger name="com.aaa.dao" level="DEBUG" additivity="false">
                <appender-ref ref="consolePrint"/>
            </logger>

            <root level="info" >
                <appender-ref ref="consolePrint" />
            </root>
        </loggers>

    </Configuration>

    第四步:开始测试

    /**
             * 读取配置文件
             *     IO
             */
            Reader reader = Resources.getResourceAsReader("mybatisConfig.xml");
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);//加载并创建连接工厂
            
            SqlSession  session1 = factory.openSession();//从连接池取出一个连接。
            
            StudentDao dao1 = session1.getMapper(StudentDao.class);
            
            Student stu1 = dao1.selectOne(21);
            stu1.setStuName("张小三");
            dao1.update(stu1);
            
            session1.commit();
            session1.close();//把连接归还给连接池
            System.out.println(stu1.getStuName());
            
            System.out.println("---上一个sql数据被缓存,数据缓存到session里----");
            
            SqlSession session2 = factory.openSession();//从连接池取出一个连接。
            StudentDao dao2 = session2.getMapper(StudentDao.class);
            Student stu2 = dao2.selectOne(21);
            
            session2.commit();
            session2.close();//把连接归还给连接池
            System.out.println(stu2.getStuName());
            
            System.out.println("---上一个sql数据被缓存,数据缓存到session里----");
            
            SqlSession session3 = factory.openSession();//从连接池取出一个连接。
            StudentDao dao3 = session3.getMapper(StudentDao.class);
            Student stu3 = dao3.selectOne(21);
            
            session3.commit();
            session3.close();//把连接归还给连接池
            System.out.println(stu3.getStuName());




    展开全文
  • java一级缓存,二级缓存

    千次阅读 2018-01-26 11:37:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • Java面试题 Mybatis中一级缓存 和 二级缓存的区别? 两者区别:一级缓存的作用域是在SqlSession中,二级缓存的作用域是针对mapper做缓存。 一级缓存(本地缓存): 一级缓存是框架默认为我们开启的,我们不需要做任何...
  • hibernate二级缓存java包下载,在博客中有讲解,请观看
  • MyBatis 的一级缓存与二级缓存

    千次阅读 2022-02-11 15:12:02
    二级缓存是基于全局(nameSpace)的,开启需要配置。 对于 JDBC 操作,如果需要连续请求 id=1 的用户数据,那么就要进行两次的数据库连接,获取数据库中的数据。相同的数据,进行两次数据库连接,这肯定会造成资源的...
  • 我们在Mapper.xml文件中开启二级缓存时: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ...
  • Mybatis 中的一级缓存与二级缓存

    千次阅读 2022-01-19 23:57:32
    Mybatis 中的一级缓存与二级缓存
  • java MyBatis基础教程,一二级缓存.zip
  • 一级缓存2.1 一级缓存的命中场景2.2 触发清空一级缓存2.3 一级缓存源码分析3 二级缓存3.1 二级缓存设计3.2 二级缓存的使用3.3 二级缓存的命中场景3.4 二级缓存源码分析3.4.1 query查询操作。3.4.2 commit提交操作...
  • java级缓存框架J2cache

    千次阅读 2018-07-26 13:41:28
    第一级缓存使用 Ehcache,第二级缓存使用 Redis 。由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数。该缓存框架主要用于集群环境中。单机也可使用,用于避免应用...
  • hibernate二级缓存(一)一级缓存与二级缓存 1.hibernate一级缓存 hibernate的一级缓存是session级别的缓存,一级缓存hibernate默认启用且不能被卸载,一个事务内有效。 特点: 使用一级缓存的目的是为了...
  • 大家都知道CPU缓存很重要,但对于缓存的具体细分却知之甚少,本文只要是关于CPU缓存的介绍,并着重描述了一级缓存、二级缓存、三级缓存区别方法。 CPU缓存 CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器...
  • Mybatis实现二级缓存

    千次阅读 2021-12-14 16:04:07
    目录 一、Mybatis实现Ehcache作为二级缓存 ...5 、mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存 ①、开启mybatis的二级缓存...
  • 题记 常常听到别人提起:“一级缓存、二级缓存、三级缓存”。那么它们是什么呢?有什么作用呢?
  • mybatis的一级缓存和二级缓存

    千次阅读 2021-06-21 21:23:44
    一、什么是缓存 ...、mybatis一级缓存 1、一级缓存简介 一级缓存作用域是sqlsession级别的,同一个sqlsession中执行相同的sql查询(相同的sql和参数),第一次会去查询数据库并写到缓存中,第
  • CPU中的一级缓存,二级缓存,三级缓存

    万次阅读 多人点赞 2018-06-14 13:49:56
    CPU中的一级缓存,二级缓存,三级缓存 缓存又叫高速缓冲存储器,其作用在于缓解主存速度慢、跟不上CPU读写速度要求的矛盾。 缓存的实现原理,是把CPU最近最可能用到的少量信息(数据或指令)从主存复制到CACHE中,当...
  • Mybatis 中一级缓存与二级缓存

    千次阅读 2022-01-17 23:00:17
    Mybatis 中一级缓存与二级缓存
  • Mybatis开发要点-为什么不用二级缓存

    千次阅读 多人点赞 2021-03-16 14:22:54
    级缓存 MyBatis 包含一个非常强大的查询缓存特性,使用缓存可以使应用更快地获取数据,避免频繁的数据库交互 ; 一级缓存 (也叫应用缓存): 一级缓存默认会启用,想要关闭一级缓存可以在select标签上配置...
  • 要想回答这个问题,必须把一级缓存和二级缓存的实现搞明白,详细介绍一下 我们知道Mybatis有一级缓存和二级缓存,底层都是用HashMap实现的 key为CacheKey对象(后续说原因),value为从数据库中查出来的值。 Mybatis...
  • Mybatis的一级缓存和二级缓存详解

    千次阅读 多人点赞 2018-11-19 19:11:59
    注:本笔记是根据尚硅谷的MyBatis视频记录的 对于任何一个持久层框架,都有缓存机制;... 两个关于mybatis缓存额外的链接: ...关于Mybatis的一级缓存和二级缓存执行顺序具体可参考:Mybatis的一级缓存和二级缓存执行...
  • MyBatis一级缓存和二级缓存

    万次阅读 多人点赞 2018-09-05 22:44:30
    MyBatis自带的缓存有一级缓存和二级缓存 一级缓存 Mybatis的一级缓存是指Session缓存。一级缓存的作用域默认是一个SqlSession。Mybatis默认开启一级缓存。 也就是在同一个SqlSession中,执行相同的查询SQL,第一次...
  • MyBatis-23MyBatis缓存配置【二级缓存

    千次阅读 2018-05-07 12:00:39
    二级缓存的配置 全局开关cacheEnabled Mapper.xml中配置二级缓存 Mapper接口中配置二级缓存 只使用注解方式配置二级缓存 同时使用注解方式和XML映射文件时 二级缓存的使用 前提:实体类实现Serializable接口 ...
  • Mybatis 的一级缓存和二级缓存详解

    千次阅读 2021-07-31 17:15:59
    注:本笔记是根据尚硅谷的MyBatis视频记录的 ...关于Mybatis的一级缓存和二级缓存执行顺序具体可参考:Mybatis的一级缓存和二级缓存执行顺序  Mybatis整合第三方缓存步骤具体可参考:Myb...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 245,537
精华内容 98,214
关键字:

java二级缓存设计

java 订阅