java - 如何缓存任意时间差异的数据差异(java web 服务)

标签 java memcached diff

我有一个 Java Web 服务,它查询数据库以将数据返回给用户。数据库查询的成本很高,因此我有 Cron 作业,每 60 秒运行一次,以将当前数据缓存在 memcached 中。 数据元素在一段时间后“关闭”,这意味着“获取当前数据”请求不会返回它们。因此这些请求可以利用缓存的数据。

客户端使用名为“since”的功能来获取自特定时间戳(最后一个请求的时间戳)以来更改的所有数据。如果数据在该时间戳之后关闭,这将返回任何关闭的数据。

如何有效地存储 diff/since 数据?为每个since请求访问数据库太慢(并且无法很好地扩展),但由于客户端可以请求任何since时间,因此很难生成通用缓存。

我尝试让 cron 作业也构建一个自缓存。它会执行“since”请求以获取自上次更新以来发生的所有更改,并尝试强制客户端请求与 cron 作业的since请求相匹配的时间戳。但是 cron 花费的时间不一致,加上客户端和 Jade 米作业都不是每 60 秒运行一次,所以微小的差异加起来。这最终会导致一些数据关闭,但缓存或客户端会错过它。

我什至不知道要搜索什么来解决这个问题。

最佳答案

我很想在数据库前面粘贴一个过期的缓存(例如设置了 timeToLive 的 ehcache),并让任何更新数据库的进程也将数据直接放入缓存中(重置或删除现有的匹配元素) 。然后,Web 服务只需在除初始连接之外的所有内容上命中缓存(速度非常快),过滤掉一些太旧的元素并将其余元素发送到客户端。随着其生存时间的流逝,旧数据逐渐从缓存中删除。然后只需确保在服务启动时预先填充缓存即可。

关于java - 如何缓存任意时间差异的数据差异(java web 服务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8759590/

相关文章:

java - 如何使用 Wikipedia API 提取/解析我要查找的链接?

django - 通过 session key 在请求之间访问 pandas 数据框对象

java - Java 日期验证的正则表达式

python - 应用程序引擎Python : AttributeError: 'module' object has no attribute 'Stock'

ruby - 写密集型特征的架构

不撕裂函数的 git diff 算法? (语言感知差异)

git - 支持 git 中的其他非文本文件类型

diff - 如何在 Linux 中比较两个源代码树?

java - JPA EntityTransaction 抛出 java.lang.IllegalStateException

java - 如何将此 3 JOIN 查询转换为 Spring Data JPA 命名查询方法?