`

ibatis缓存浅析

阅读更多
一、缓存介绍
1.1、引入
     什么影响Internet访问速率?
     访问网站的过程是通过建立在TCP/IP协议之上的HTTP协议来完成的。从客户端发出一个HTTP请求开始,用户所经历的等待时间主要决定于DNS和网站的响应时间。网站域名首先必须被DNS服务器解析为IP地址,HTTP的延时则由在客户端和服务器间的若干个往返时间所决定。
   往返时间是指客户端等待每次请求的响应时间,平均往返时间取决于三个方面:网站服务器的延时; 由路由器、网关、代理服务器和防火墙引入的延时;不同通信链路上的数据传输速率.

1.2、缓存对象
     理论上,Web分层设计的各个层都可以有缓存,Web中的任何对象都可以缓存。
1.2.1、Http请求结果的缓存
     浏览器缓存、代理缓存、服务器端方向代理缓存、使用Filter实现对请求结果页面的缓存
1.2.2、Java对象的缓存
     缓存数据库查询结果对象

1.3、缓存介质[保存在哪里]
     从硬件介质上来将无非就是两种,内存和硬盘.但是往往我们不会从硬件上来划分,一般的划分方法是从技术上划分,可以分成几种,内存,硬盘文件.数据库.

1.4、缓存的类型
     网络缓存可以在客户端,也可以在网络上,由此我们将缓存分为两类:浏览器缓存和代理缓存。
1.4.1、浏览器缓存

     几乎目前所有的浏览器都有一个内置的缓存,它们通常利用客户端本地的内存和硬盘来完成缓存工作,同时允许用户对缓存的内容大小作控制。
1.4.2、代理缓存

     代理缓存是一种独立的应用层网络服务,它更像E-mail、Web、DNS等服务。许多用户不仅可以共享缓存,而且可以同时访问缓存中的内容。其工作原理:当代理缓存收到客户端的请求时,它首先检查所请求的内容是否已经被缓存。如果没有找到,缓存必须以客户端的名义转发请求,并在收到服务器发出的文件时,将它以一定的形式保存在本地硬盘,并将其发送给客户端。

1.5、缓存更新策略
1.5.1 FIFO[first in first out]
     最先进入缓存得数据在缓存空间不够情况下(超出最大元素限制时)会被首先清理出去
1.5.2 LFU[Less Frequently Used]
     一直以来最少被使用的元素会被被清理掉。这就要求缓存的元素有一个hit 属性,在缓存空间不够得情况下,hit 值最小的将会被清出缓存。
1.5.3 LRU[Least Recently Used]
     最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

二.iBATIS高速缓存介绍
2.1 iBATIS高速缓存的关注点
     iBATIS高速缓存只关注如何在持久层对查询结果进行缓存。

2.2 iBATIS对高速缓存管理的帮助
     iBATIS带来的好处就是通过配置文件来管理高速缓存,帮助避免因手工管理高速缓存结果及其依赖性而造成的大量繁琐的工作。

2.3 iBATIS高速缓存和传统O/RM高速缓存的区别
     iBATIS的思想是建立SQL语句到对象的映射,而不是建立数据库表到对象的映射。传统O/RM工具主要关注数据库表到对象的映射。传统的O/RM高速缓存会为其管理的每个对象维护一个OID[object identification,对象标识],就像数据库需要管理其表中的每条记录的唯一性一样。这意味着,如果两个不同的结果都返回同一个对象,那么该对象将只被高速缓存一次。iBATIS不这样,关注的是SQL语句的执行结果,我们不会根据对象的唯一性来高速缓存它们iBATIS高速缓存的所有结果,而不考虑所标识的对象是否存在于高速缓存中。

三.配置iBATIS缓存
3.1 、cacheModel标签
     cacheModel标签用来配置iBATIS的高速缓存,cacheModel标签的属性包括四个属性
      id[必需]
     该值用来指定一个唯一的ID,便于为需要使用此高速缓存模型所配置的高速缓存的查询已映射语句使用。
     type[必需]
     此属性用于指定高速缓存所配置的高速缓存的类型。其有效值包括MEMORY LRU FIFO OSCACHE,该属性也可取值为某个自定义CacheController实现的全限定名。
     readOnly[可选]
     取值为true时表示高速缓存将仅仅用作只读缓存,从只读高速缓存中读出的对象的特性值不允许修改。
     serialize[可选]
     该属性用于指定在读取高度缓存内容时是否要进行“深复制”
     readOnly、serialize属性经常联合起来使用。

3.2 、iBATIS高速缓存模型的类型
3.2.1 MEMORY
     MEMORY高速缓存是一种基于引用的高速缓存。MEMORY高速缓存模型对于那些更关注内存的管理策略而不是对象的访问策略的应用程序而言是完美的。有了STRONG、SOFT、WEAK这三种引用类型,就可以确定哪些结果应该比其他结果保留更长的时间。
3.2.2 LRU
     LRU类型的高速缓存模型使用最近最少使用策略来管理高速缓存。该高速缓存的内部机制会在后台记录哪些对象最近最少使用,一旦超过高速缓存大小限制就会废弃它们。大小限制规定了高速缓存中可以存放的对象数目。应避免将那些占用较大内存的对象放置在此类高速缓存中,否则内存会很快耗尽。
     LRU高速缓存非常设用于那些需要根据某些特定对象的访问频率来管理的高速缓存的情况。通常这种高速缓存策略试用于那些需要高速缓存用于分页结果或关键词搜索结果的对象应用程序中。
3.2.3 FIFO
     FIFO高速缓存模型采用先进先出的管理策略,是一种基于时间的策略,使用于放置那些初放入时使用频率高、随时间流逝访问频率就会降低的对象。如:报表、报告股票价格。
3.2.4 OSCACHE
     OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。OSCache有以下特点:
      缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。
  拥有全面的API--OSCache API给你全面的程序来控制所有的OSCache特性。
  永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。
  支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。
  缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)
3.2.5自定义高速缓存模型
     只需要实现com.ibatis.sqlmap.engine.cache.CacheController接口即可,配置时设定type为全限类名或其别名即可。

3.3 高速缓存的清除
    使用flushOnExecute、flushInterval标签可以定义清空缓存触发条件
   <flushOnExecute>    定义查询已映射语句,其执行将引起相关高速缓存的清除
   <flushInterval>    定义一个时间间隔,高速缓存将以此间隔定期清除
   <flushInterval>标签属性如下:
   hours(可选)    每次清除高速缓存前应该经过的小时数
   minutes(可选)    每次清除高速缓存前应该经过的分钟数
   seconds(可选)    每次清除高速缓存前应该经过的秒数
   milliseconds(可选)    每次清除高速缓存前应该经过的毫秒数 

3.4 设置高速缓存模式实现的特性
由于高速缓存模型只是一些可以插入到iBATIS框架的组件,它甚至允许用户自己定制,因此必须有一种方式能为这些组件提供任意的值。<property>标签就是用来完成此任务的。name :所设定的特性的名称,value:所设定的特性的值。

3.5 常见问题
3.5.1如何选择iBATIS高速缓存模型类型
     如何选择一个适合实际应用情况的高速缓存模型类型是一个很负责的问题,需要考虑诸多因素。
需要考虑的因素:
    1.当前应用程序是否是数据库的唯一操作入口
    2.读写属性
    3.缓存时间间隔
    4.失效控制
    5.最大保存对象数目
分享到:
评论

相关推荐

    iBATIS缓存

    **iBATIS缓存**是数据库访问框架iBATIS中的一个重要特性,用于提高数据查询的效率,减少不必要的数据库访问。iBATIS缓存分为一级缓存和二级缓存,它们在提升应用程序性能方面起着关键作用。 一级缓存是SqlSession...

    iBATIS缓存介绍

    ### iBATIS缓存介绍 #### 一、缓存介绍 **1.1 缓存对象** 理论上,Web分层设计的各个层都可以有缓存,Web中的任何对象都可以成为缓存的对象。例如: - **HTTP请求结果的缓存**:如页面数据或API响应。 - **...

    ibatis缓存介绍 - 勇泽 - 博客园.mht

    ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园

    解决IBatis缓存动态字段问题

    ### 解决IBatis缓存动态字段问题 #### 背景与问题描述 在使用IBatis框架处理数据库操作时,可能会遇到动态数据表名、动态字段名的情况。这种情况下,由于IBatis的缓存机制,可能导致字段找不到的问题。具体表现为...

    iBATIS缓存的使用方法

    ### iBATIS缓存的使用方法 在数据库访问框架iBATIS中,缓存机制是一项重要的功能,它能够显著提高应用程序的性能。本文将详细介绍iBATIS中的缓存使用方法,包括缓存模型的配置、不同类型的缓存控制器以及如何在SQL...

    ibatis 缓存配置策略

    iBatis 缓存配置策略是提高数据库查询性能的关键手段之一。iBatis 提供了本地缓存机制,用于存储查询结果集,减少不必要的数据库访问。以下是对iBatis缓存配置策略的深入解析: 首先,iBatis 的 Cache 键(key)是...

    ibatis-缓存使用示例

    本示例主要关注iBATIS的缓存功能,这是提升系统性能的重要机制。缓存可以减少对数据库的直接访问,从而降低系统负载,提高响应速度。 首先,iBATIS的缓存分为两种类型:一级缓存和二级缓存。一级缓存是SqlSession...

    ibatis 缓存 - 24小时学习网.mht

    ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网

    Java ibatis缓存技术

    ### Java ibatis缓存技术详解 #### 一、ibatis缓存概述 ibatis是一款流行的持久层框架,它简化了Java应用程序与数据库之间的交互过程。ibatis提供了多种特性,其中包括缓存机制,这对于提高应用程序的性能至关重要...

    Java_ibatis缓存技术

    在iBatis中,缓存被划分为一级缓存和二级缓存。 1. **一级缓存**:也称为SqlSession级别的缓存,是默认开启的。当我们在同一个SqlSession中执行相同的SQL查询时,如果第一次查询的结果已经存在于缓存中,那么第二次...

    iBATIS缓存介绍[借鉴].pdf

    iBATIS,作为一个流行的数据访问框架,也提供了缓存功能来优化数据库查询。本文将详细介绍iBATIS缓存的概念、类型以及配置方法。 一.缓存介绍 缓存,简单来说,是为了减少对数据库的频繁访问,将常用数据存储在...

    ibatis_数据缓存

    iBatis 数据缓存机制是提高数据库访问性能的重要手段,它允许将查询结果存储在内存中,以便后续相同查询能够快速获取数据,而无需每次都执行SQL查询。在深入理解iBatis的Cache概念之前,首先需要知道iBatis是一个轻...

    ibatis 数据缓存.pdf

    ibatis 数据缓存,讨论了ibatis 数据缓存方面的概念,即用法,用到ibatis 数据缓存的可以参考一下

    spring+ibatis+oracle分页缓存源码

    在Spring+iBatis+Oracle体系中,缓存可以分为两种类型:一级缓存(本地缓存)和二级缓存。 一级缓存是iBatis默认提供的,它存在于SqlSession级别,同一SqlSession内的多次查询会共享结果,避免了重复的数据库访问。...

    Ibatis之缓存插件

    Oscache.jar包 博文链接:https://dangzhao.iteye.com/blog/193572

    iBATIS教程之快速入门浅析

    iBATIS 是一款轻量级的Java持久层框架,它主要负责对象关系映射(Object-Relational Mapping,简称O/R Mapping),使得开发者可以将关注点集中在业务逻辑上,而无需过多地处理数据库操作的细节。与Hibernate等其他...

    ibatis demo,ibatis例子,ibatis示例

    7. **缓存机制**:Ibatis内置了本地缓存和二级缓存,可以提高数据读取速度。本地缓存作用于单个SqlSession,而二级缓存则可以在多个SqlSession之间共享,但需要注意并发控制和数据一致性问题。 8. **插件支持**:...

Global site tag (gtag.js) - Google Analytics