当前位置: 首页 > 面试题库 >

是否可以将Guava Cache(或其他库)的行为配置为:如果需要重新加载,请返回上一个条目,在后台重新加载(请参阅规格)

奚修伟
2023-03-14
问题内容

我希望有一个这样的缓存:

  • 答:如果未缓存请求:加载并返回结果。
  • B.如果请求被缓存,尚未过期:返回结果。
  • C.如果请求已缓存,则已过期:立即返回旧结果,开始重新加载结果(异步)
  • D.如果请求已缓存,已过期,则重新加载已在运行:立即返回旧结果。
  • E.如果重新加载失败(异常):继续将先前成功的加载结果返回给请求。

(重新加载失败后(案例E),将在案例C之后处理下一个请求。)

(如果情况A以Exception结尾,则抛出Exception)

有谁知道现有的实现,还是我必须自己实现?


问题答案:

https://github.com/ben-manes/caffeine

咖啡因提供了我想要的即开即用的行为refreshAfterWrite

LoadingCache<K, V> cache = Caffeine.newBuilder()
   .refreshAfterWrite(expireTime, timeUnit)
   .maximumSize(maxCountOfItems)
   .build(k->loader.load(k));


 类似资料:
  • 问题内容: 是否有一种惯用的方式让Flask在每次请求时重新加载我的配置文件?这样做的目的是使我可以更改密码或其他与配置有关的项目,而不必在生产环境中关闭并重新启动服务器。 编辑:是不可接受的,因为它会重新启动服务器,并且不应在生产中使用。 也许是这样的装饰器: 如果相关,这是我现在如何加载配置的方法: 我的档案: 我的档案: 问题答案: 在应用程序开始处理请求之后,您将无法安全/正确地重新加载配

  • 问题内容: Ajax请求后如何刷新或重新加载div?我有此代码: 我需要重新加载或刷新标题div。 问题答案: 您可以这样加载div.div之前请注意空格

  • 问题内容: 我将log4j2.xml配置文件设置为每30秒检查一次: 是否可以以编程方式告诉log4j2检查配置中的更改而不是超时? 注意: 我不想以编程方式加载指定配置文件的配置,我只想告诉log4j2检查MonitorInterval过期之前已加载的配置文件。 谢谢! 问题答案: 看来我找到了解决方案: 有人看到任何错误/副作用吗?

  • 我通过AJAX请求从数据库中获取表数据。我需要更改AJAX请求中的数据参数并刷新表。 我正在用命令刷新表格 我有以下代码 但是在AJAX重新加载之后,会向服务器发送原始请求,并忽略新的参数值。我试图通过函数、全局变量和浏览器存储将数据传递给请求,但这些方法都不起作用。在互联网上,我找到了解决问题的方法 功能,但我不知道如何使用它。 我的jQuery数据表版本是1.10.7。 我还尝试使用以下代码销

  • 似乎自从我们将tomcat升级到Version8+后,我们在启动时就会重新加载上下文。然而,这似乎只发生在我们的开发环境中(带有eclipse和Tomcat8.5的windows OS)。我们的生产环境(带有Tomcat8.5的linux OS)不存在此问题。我把它贴在下面,但我没有看到任何迹象表明为什么会发生这样的tomcat日志。我知道这是正常的行为,在web应用程序目录中的一些东西被改变,但

  • 正如在C 11中所知,有6个内存顺序,在关于std::memory\u order\u acquire的文档中: http://en.cppreference.com/w/cpp/atomic/memory_order memory\u order\u acquire内存\u顺序\u获取 具有此内存顺序的加载操作对受影响的内存位置执行获取操作:在此加载之前,当前线程中的内存访问不能重新排序。这可以