zoukankan      html  css  js  c++  java
  • 初学hibernate之缓存

    一、1、Session级别缓存属于一级缓存,持久化对象保存在Session一级缓存中(一级缓存引用持久化对象地址),只要session不关闭,一级缓存就存在,缓存中对象也不会被回收;

    Session会在一些特定时间点,将缓存中数据flush到数据库中( Transaction的commit()、应用程序执行一些查询操作、调用session的flush方法)。

    2、SessionFactory级别缓存属于二级缓存

    二、证明一级缓存存在:在获取Customer的Demo中,可以使用同一个Session获取两次Customer,如:

    Customer c1=session.get(Customer.class,1);//这时c1是持久化状态,c1存储在session中(一级缓存);

    System.out.println(c1.getName());

    Customer c2=session.get(Customer.class,1);//可验证c2获取值时并未向数据库发送SQL语句,而且c1值和c2值相同

    System.out.println(c2.getName());

    三、hibernate快照

    Hibernate快照可以让持久化对象具有自动更新能力。

    如在执行customer查询操作时Customer c1=session.get(Customer.class,1);如果取到的c1对象Name为”tom“,然后c1.setName("fox");然后提交事务并关闭session。数据库查询customer数据,id为1的记录name值更改为fox。这是快照让对象有了自动更新能力。

    Hibernate向一级缓存放入数据时,同事保存快照数据(数据备份),当修改一级缓存数据,在flush操作时,对比缓存和快照,如果不一致自动更新(将缓存数据同步到数据库,并更新快照)

    四、一级缓存常见操作:

    1、flush,用于刷新一级缓存,使快照区数据和缓存数据一致,在没有提交数据库执行前,数据库数据没有改变

    2、clear,清空一级缓存中所有对象

    3、evict,清空一级缓存中指定对象

    4、refresh,使用数据库数据同步一级缓存与快照(重新查数据库,更新快照和一级缓存)

  • 相关阅读:
    固态硬盘安装后优化
    如何在面试中为人才留下好印象
    数据化管理学习笔记
    项目经理入门记(一)
    Ubuntu10下MySQL搭建Amoeba系列(文章索引)
    SQL Server 性能优化实战系列(文章索引)
    Ubuntu12下挂载硬盘(9TB)(文章索引)
    SQL Server 设计开发系列(文章索引)
    简单实用SQL脚本
    SQL Server 维护管理系列(文章索引)
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/4734766.html
Copyright © 2011-2022 走看看