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

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

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


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

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

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

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

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

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

但是本设计方案有些缺陷:
     如果大量的dao需要缓存,因为本设计采用了静态代理的方式,所以需要大量的代理类,也可以采用一个缓存代理多个dao,但是随着系统越来越大,这种方式会难以维护。能否采用AOP的方式实现?这是一个值得思考的地方
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

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

页面输出缓存(页面静态化)的设计                随着网站规模的变大,访问量提升,网站服务器越来越不堪重负,浏览者也会对页面打...

通用数据缓存设计方案

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

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

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

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

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

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

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

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

随着网站规模的变大,访问量提升,网站服务器越来越不堪重负,浏览者也会对页面打开的速度怨声载道。 这时候最简单的解决方案就是增加缓存。 网站服务器的缓存有很多中,可以放在数据库和Web应用程...

JAVA自定义缓存设计方案

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

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

扩展RBAC用户角色权限设计方案 领域模型  from http://www.iteye.com/topic/930648 RBAC(Role-Based Acce...

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

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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