zoukankan      html  css  js  c++  java
  • Hibernate:缓存

    Hibernate 数据缓存(Cache)分为两个层次,一级缓存 Session Level,二级缓存 SessionFactory Level。

    Hibernate 中缓存将在以下两种情况中发挥作用:

    1. 通过主键加载数据时
    2. 延迟加载

    先介绍下一级缓存,Session 在内部维护了一个 Map 数据类型,此数据类型中保持了所有的与当前 Session 相关联的数据对象。这些 Map 数据结构中维护了当前 Session 中所有相关 PO 的状态。这些 Map 数据结构为 Session 的私有数据,伴随 Session 实例的创建而创建,消亡而消亡,因此,有时也称为此缓存为 Session Level Cache。

    二级缓存将由从属于本 SessionFactory 的所有 Session 实例共享,因此有时称为 SessionFactory Leve Cache。

    Session 在进行数据查询操作时,会首先在自身内部的一级缓存中进行查找,如果一级缓存未能命中,则将在二级缓存中查询,如果二级缓存命中,则以此数据作为结果返回。

    Hibernate 和 MyBatis 中的一级缓存和二级缓存的原理和作用范围基本上一致。

    在引入二级缓存时,我们首先必须考虑以下问题:

    1. 数据库是否与其他应用共享
    2. 应用是否需要部署在集群环境中

    对于第一种情况,往往也就意味着我们不得不放弃二级缓存的使用,或者对数据库的共享情况进行细化,比如某个表由本应用独占,那么也可以对此表引用二级缓存机制。

    对于第二种情况,我们必须考虑是否需要引入分布式缓存机制,以及引入分布式缓存带来的实际性能变化。

    如果数据满足以下条件,则可将其纳入缓存管理:

    1. 数据不会被第三方应用修改
    2. 数据大小(Data Size)在可接受的范围之内
    3. 数据更新频率较低
    4. 同一数据可能会被系统频繁引用
    5. 非关键数据(关键数据,如金融账户数据)

    参考:

    本文为书籍 深入浅出Hibernate 的读书笔记

  • 相关阅读:
    数据绑定(八)使用Binding的RelativeSource
    你是程序猿这块料吗?
    创建与删除索引
    Verilog分频器
    mysql触发器的作用及语法
    QoS令牌桶工作原理
    Android 开发新方向 Android Wear ——概述
    程序猿接私活经验总结,来自csdn论坛语录
    [Node.js]27. Level 5: URL Building & Doing the Request
    [Node.js]26. Level 5 : Route rendering
  • 原文地址:https://www.cnblogs.com/colin220/p/11430899.html
Copyright © 2011-2022 走看看