将ReadWriteLock应用于缓存设计

将ReadWriteLock应用于缓存设计

本文最早发表于BEA dev2dev

——针对缓慢变化的小数据的缓存实现模型

在JavaEEdev站点(http://www.javaeedev.com)的设计中,有几类数据是极少变化的,如ArticleCategory(文档分类),ResourceCategory(资源分类),Board(论坛版面)。在对应的DAO实现中,总是一次性取出所有的数据,例如:

1. List<ArticleCategory> getArticleCategories();

此类数据的特点是:数据量很小,读取非常频繁,变化却极慢(几天甚至几十天才变化一次),如果每次通过DAO从数据库获取数据,则增加了数据库服务器的压力。为了在不影响整个系统结构的情况下透明地缓存这些数据,可以在Facade一层通过Proxy模式配合ReadWriteLock实现缓存,而客户端和后台的DAO数据访问对象都不受影响:

首先,现有的中间层是由Facade接口和一个FacadeImpl具体实现构成的。对ArticleCategory的相关操作在FacadeImpl中实现如下:

01. public class FacadeImpl implements Facade {
02. protected CategoryDao categoryDao;
03. public void setCategoryDao(CategoryDao categoryDao) {
04. this.categoryDao = categoryDao;
05. }
06. // 读操作:
07. public ArticleCategory queryArticleCategory(Serializable id) {
08. return categoryDao.queryArticleCategory(id);
09. }
10. // 读操作:
11. public List<ArticleCategory> queryArticleCategories() {
12. return categoryDao.queryArticleCategories();
13. }
14. // 写操作:
15. public void createArticleCategory(ArticleCategory category) {
16. categoryDao.create(category);
17. }
18.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值