【问题标题】:Update cached data in a hashtable更新哈希表中的缓存数据
【发布时间】:2009-09-19 22:44:12
【问题描述】:

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

【问题讨论】:

    标签: java caching hashtable


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以使用现有的解决方案(请参阅之前的回复)

      或者,如果您想要挑战,制作自己的简单缓存类(不推荐用于生产项目,但这是一次很棒的学习体验

      您至少需要 3 名成员

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

      2. 下一个缓存到期日期

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

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

      • 如果没有过期,调用 hastable 的访问器;

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

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

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

      • 自动、半自动和单次数据重新加载(例如,一次重新加载整个缓存;重新加载由某些预定义查询定义的一批数据,或重新加载单个数据元素片段邮件)。当您的缓存对相同的确切键有多次命中时,后一种方法非常有用 - 这样您就不需要在每次总是访问的 3 个 ket 过期时重新加载 Universe。

      【讨论】:

      • 现在这将是一次学习体验,但当我需要 Ehcahce 和其他人进行实际项目时,我会考虑它。这一次规范没有要求这个特定的功能——这只是我想做的事情(但永远不会向公众发布)。
      【解决方案3】:

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

      对于您所描述的简单需求,我会考虑 EHCache 或 OSCache(我不是说它们是基本的,但它们很容易上手),它们都支持基于时间的过期。

      如果我必须选择一种解决方案,我会推荐我喜欢的 Ehcache,尤其是现在它已加入 Terracotta。并且为了记录,Ehcache 通过net.sf.cache.jcache package 提供了JSR107 的a preview implementation

      【讨论】:

      • JSR-107 规范是一本很好的读物。它确实涉及我的问题。
      猜你喜欢
      • 2013-07-29
      • 1970-01-01
      • 2020-09-17
      • 2017-01-22
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多