更新哈希表中的缓存数据

时间:2009-09-19 22:44:13

标签: java caching hashtable

为了最大限度地减少数据库查询的数量,我需要某种缓存来存储数据对。我的方法现在是一个哈希表(使用字符串作为键,整数作为值)。但我希望能够检测数据库中的更新并替换“缓存”中的值。我正在寻找的是使我的存储对在预设的时间跨度之后无效,可能是10-15分钟。我该如何实现?我可以使用标准Java包中的某些东西吗?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

您可以使用现有解决方案(请参阅上一个回复)

或者,如果您想要挑战,请制作自己的简易缓存课程(不建议用于制作项目,但这是一次很棒的学习体验

您将需要至少3名成员

  1. 存储为哈希表对象的缓存数据

  2. 下一个缓存到期日期

  3. 通过构造函数设置的缓存到期间隔。

  4. 然后简单地使用公共数据getter方法来验证缓存过期状态:

    • 如果没有过期,请致电hastable的访问者;

    • 如果过期,首先调用“数据加载”方法,该方法也在构造函数中调用以预先填充,然后调用哈希表访问器。

    对于更酷的缓存类(我在工作中使用Perl实现),您可以使用其他功能实现:

    • 单个按键缓存过期(加上整体缓存过期总量)

    • 自动,半自动和单次数据重新加载(例如,一次重新加载整个缓存;重新加载由某些预定义查询定义的一批数据,或重新加载单个数据元素piecemail)。当你的缓存在相同的密钥上有很多命中时,后一种方法非常有用 - 这样你就不需要在每次访问总是访问的3个kets时重新加载Universe。

答案 2 :(得分:0)

您可以使用OSCacheEHCacheJBoss CacheJCS等缓存框架...如果您正在寻找符合“标准”的内容,选择支持JCache标准接口(javax.cache)aka JSR-107的框架。

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

如果我必须选择一种解决方案,我会推荐Ehcache,这是我的偏好,特别是现在已经加入了Terracotta。只是为了记录,Ehcache通过net.sf.cache.jcache package提供了a preview implementation JSR107。