可复用、扩展的缓存设计方案

原创 2006年06月09日 10:00:00
背景:
        为网站有大量的查询数据做缓存。

        方案使用第三方组件oscache.jar,如何能合理的集成这个组件,使得需要缓存的对象和缓存的算法隔离开来,使得两者能够独立演化,而不是相互耦合,看下面的设计图:


见上图,可以看出设计方案采用了策略模式和代理模式

我们将缓存算法使用CacheFacade 接口进行了抽象,使得需要缓存的对象和缓存算法相互独立,需要缓存的对象可以方便的更换缓存算法,本案中我们使用了oscache。

Cacheable接口抽象了需要缓存的对象。

假定以前代码已经写好,service--->dao

现在需要加入缓存,怎么实施?

从上图可以看出CachedTopVideosContributedDaoImpl实现了dao接口和Cacheable接口,这样service层无需作任何改动,CachedTopVideosContributedDaoImpl实例是一个代理对象,对原先的dao实例进行了封装,并在其中加入缓存方案。就是这么简单,说白了就是在service和dao之间加了一个代理层。

但是本设计方案有些缺陷:
     如果大量的dao需要缓存,因为本设计采用了静态代理的方式,所以需要大量的代理类,也可以采用一个缓存代理多个dao,但是随着系统越来越大,这种方式会难以维护。能否采用AOP的方式实现?这是一个值得思考的地方

Redis实现求交集操作结果缓存的设计方案

Redis的集合操作实话说,Redis提供的集合操作是我选择它成为内存数据库的一个主要理由,它弥补了传统关系型数据库在这方面带来的复杂度,使得只需要简单的一个命令就可以完成一个复杂SQL任务,并且交、...

数据缓存设计方案-------一致性哈希

随着数据的分布式存储,如何快速定位数据在集群中的位置,关系到集群的性能。下面介绍常见的分布式存储方式。 普通集群普通集群把固定的key映射到固定的节点上,节点中至只存放各自key的数据。这种方式就需要...

数据缓存设计方案(一致性哈希)

随着数据的分布式存储,如何快速定位数据在集群中的位置,关系到集群的性能。下面介绍常见的分布式存储方式。 普通集群 普通集群把固定的key映射到固定的节点上,节点中至只存放各自key...

通用数据缓存设计方案

随着redis等内存数据库的流行,大多数应用及系统均开始采用redis集群作为系统的缓存方案,用来减少数据库的压力,增加应用并发及响应速度。前端页面的缓存暂不做探讨,主要是针对后端服务的数据缓存。 ...

Nginx:页面输出缓存(页面静态化)的设计方案?

页面输出缓存(页面静态化)的设计                随着网站规模的变大,访问量提升,网站服务器越来越不堪重负,浏览者也会对页面打开的速度怨声载道。 这时候最简单的解决方案就是增加缓存...
  • zacklin
  • zacklin
  • 2012年08月10日 11:45
  • 9310

实时刷新缓存-处理mysql主从延迟的一些设计方案

在项目开发当中,经常有这样一种场景,对数据库进行添加、修改、删除操作的应用直接连接master库,只对数据库进行查询的应用,会先建立一个中央缓存,例如redis或者memcache,如果缓存没有命中,...

JAVA自定义缓存设计方案

缓存有一个缓存基类,其它缓存类都继承基类.去实现一些方法,其它缓存类可以在里面写自己特有的方法.以带到不同的需求.实现基类主要是方便管理缓存. 基类内容如下: import java.util.A...

实时刷新缓存-处理mysql主从延迟的一些设计方案

实时刷新缓存-处理mysql主从延迟的一些设计方案

扩展RBAC用户角色权限设计方案

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-...

可扩展、高可用、负载均衡网站架构设计方案

基本需求: 1、  高可用性:将停止服务时间降低到最低甚至是不间断服务2、  可扩展性:随着访问的增加,系统具备良好的伸缩能力3、  可视性:系统、服务的状态处于一个实时的监控之下4、  高性能高可靠...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:可复用、扩展的缓存设计方案
举报原因:
原因补充:

(最多只允许输入30个字)