2009-09-19 152 views
1

缓存数据为了最大限度地减少我需要某种形式的高速缓存来存储数据对数据库查询的次数。我现在的做法是一个散列表(以字符串作为键,整数作为值)。但我希望能够检测数据库中的更新并替换我的“缓存”中的值。我正在寻找的东西,使我的存储对在预设的时间范围内无效,大概10-15分钟。我将如何实现?在我可以使用的标准Java包中有什么东西?更新在哈希表中

回答

0

您可以使用现有的解决方案(见前面的回复)

或者,如果你想一个挑战,让自己轻松缓存类(不推荐用于生产项目,但这是一个很好的学习经验

你将需要至少3名成员

  1. 存储为散列表对象A的高速缓存数据,

  2. 下一高速缓冲存储器期满日期

  3. 缓存到期间隔通过构造方法设置。

然后,只需有公开数据的获取方法,验证缓存过期状态:

  • 如果没有过期,呼叫hastable的存取;

  • 如果期满,第一呼叫“数据加载”方法,该方法也被称为在构造函数中预先填充,然后调用哈希表的存取。

对于甚至更冷的缓存类(我已经实现了它在Perl在我的工作),你可以有更多的功能,可以实现:

  • 单独的每键缓存过期(加上总体缓存过期总数)

  • 自动,半自动和单次数据重新加载(例如,立即重新加载整个缓存;重新加载由某个预定义查询定义的一批数据,或重新加载单个数据元素单件邮件) 。后一种方法是非常有用的,当你的缓存有完全相同的钥匙许多命中 - 这样你就不需要每次3个凯茨说总是访问到期重装宇宙。

+0

现在这将是一次学习经历,但是当我需要一个真正的项目时,我会考虑Ehcahce和其他人。这一次规范并没有要求这个特定的功能 - 这只是我想尝试和做的事情(但从来没有公开)。 – matpe 2009-09-20 06:13:50

4

我会使用一些现有的解决方案(有很多缓存框架)。 ehcache是伟大的,它可以重置给定的时间跨度值和我打赌它可以做更多的事情(我只使用了)

0

你可以使用一个缓存框架像OSCacheEHCacheJBoss CacheJCS ......如果你正在寻找的东西,遵循“标准”,选择支持的JCache标准接口(使用javax的框架。缓存)又名JSR-107

对于简单的需求,如你所描述的,我会看EHCache或OSCache(我不是说它们是基本的,但它们很容易入手),它们都支持基于时间的到期。

如果我不得不选择一种解决方案,我会推荐Ehcache,它有我的偏好,特别是现在它已经加入了兵马俑。而为了记录,Ehcache通过net.sf.cache.jcache package提供了JSR107的a preview implementation

+0

JSR-107规范是一个很好的阅读。它真正处理我的问题。 – matpe 2009-09-20 07:04:57