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

3261人阅读 评论(0) 收藏 举报
背景:
        为网站有大量的查询数据做缓存。

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


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

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

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

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

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

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

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:923229次
    • 积分:11704
    • 等级:
    • 排名:第1281名
    • 原创:201篇
    • 转载:5篇
    • 译文:14篇
    • 评论:291条
    文章分类
    最新评论