gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:36:31 28 4
gpt4 key购买 nike

我有一个 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com