首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

怎么设计缓存及Hibernate缓存机制

2013-10-08 
如何设计缓存及Hibernate缓存机制缓存的设计一般要用到单例设计模式和资源设计模式,还需要注意多线程同步

如何设计缓存及Hibernate缓存机制

    缓存的设计一般要用到单例设计模式和资源设计模式,还需要注意多线程同步的问题,以下主要讨论如何设计缓存,什么是数据库连接池,以及Hibernate中的缓存机制。

如何设计缓存缓存原理

    在Java中经常用到缓存,在SSh框架中也会用到一级缓存和二级缓存,到底缓存是怎么实现的呢?

    缓存就是利用本地参考原则:当CPU要读取一个数据时,首先从缓存中查找,找到就立即读取并送给CPU处理;没有找到,就用相对慢的速率从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。缓存是一种典型的空间换时间的方案。

    缓存就相当于是一个临时内存:它有一个有限的空间量,但访问它比访问原始数据速度要快。

    在分布式系统设计中,如果在请求层节点上放置一个缓存,即可响应本地的存储数据。当对服务器发送一个请求时,如果本地存在所请求数据,那么该节点即会快速返回本地缓存数据。如果本地不存在,那么请求节点将会查询磁盘上的数据。请求层节点缓存即可以存在于内存中(这个非常快速)也可以位于该节点的本地磁盘上(比访问网络存储要快)。全局缓存是指所有节点都使用同一个缓存空间;分布式缓存即缓存在分布式系统各节点内存中的缓存数据。

缓存算法

常用的缓存算法有:先进先出FIFO(First In First Out),LRU(Least Recently Used),LFU(LeastFrequently Used),具体见http://developer.51cto.com/art/201212/372465_2.htm

开源缓存产品 

    一个非常流行的开源缓存产品:Memcached(即可以在本地缓存上工作也可以在分布式缓存上工作)。Memcached用于许多大型Web站点,其非常强大。Memcached基于一个存储键/值对的hashmap,优化数据存储和实现快速搜索(O(1))。

如何设计缓存

在Java中最常见的一种实现缓存的方式就是使用Map,基本的步骤是:

1)先到缓存里面查找,看看是否存在需要使用的数据

2)如果没有找到,那么就创建一个满足要求的数据,然后把这个数据设置回到缓存中,以备下次使用

3)如果找到了相应的数据,或者是创建了相应的数据,那就直接使用这个数据。

下面只是缓存的基本实现,还有很多功能都没有考虑,比如缓存的清除,缓存的同步等等。现在有很多专业的缓存框架。

缓存接口设计

2.2.2什么样的数据适合存放到第二级缓存中? 

1)很少被修改的数据 

2)不是很重要的数据,允许出现偶尔并发的数据 

3)不会被并发访问的数据 

4)参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。

2.2.3不适合存放到第二级缓存的数据? 

1)经常被修改的数据 

2)财务数据,绝对不允许出现并发 

3)与其他应用共享的数据。

2.3 常用的缓存插件 

Hibernater 的二级缓存是一个插件,下面是几种常用的缓存插件:

EhCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,对Hibernate的查询缓存提供了支持。

OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。

SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。

JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对Hibernate的查询缓存提供了支持。

配置二级缓存的主要步骤:

1) 选择需要使用二级缓存的持久化类,设置它的命名缓存的并发访问策略。这是最值得认真考虑的步骤。

2) 选择合适的缓存插件,然后编辑该插件的配置文件。如

怎么设计缓存及Hibernate缓存机制





热点排行