问题标签 [cache-invalidation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
289 浏览

google-chrome - 使用 Webpack 缓存失效

我将hashid 附加到由webpack. 每当我得到一个新的构建时,我都会看到文件名被新的哈希更改,并且index.html文件正在引用这些文件。但是在部署我的应用程序后,一些使用 Chrome 的用户在从应用程序注销之前看不到新文件。有没有人遇到过这个问题,知道有什么解决办法吗?

0 投票
8 回答
9339 浏览

android - 错误:原因:无效的流标头:android studio 2.3.1 中的 000900D9

我正在使用 android studio 2.3.1,它昨天工作正常但现在它给我一个错误Error:Cause: invalid stream header: 000900D9 this message throw from Messages Gradle Sync dialog

以下是我为解决此问题所做的步骤,但对我没有任何作用

1.使缓存无效并重新启动

  1. 从C:\Users\suraj.gradle\caches\3.3删除脚本和脚本重新映射的文件

并且还检查了stackoverflow中的许多帖子,但对我没有任何作用,而且这里提出的大多数问题都没有得到任何人的回答。

在我的项目结构下

编译SDK版本:Api 25

构建工具版本:25.0.2

0 投票
1 回答
300 浏览

php - Symfony 3.1 缓存组件中的缓存失效

我使用 Symfony 3.1 的缓存组件来为我的实体存储一些自定义元数据。一旦与这些元数据关联的任何文件发生更改,我想立即使其无效。

我没有找到一种方法来告诉 Symfony 或缓存组件特别注意一组特定文件的变化,我错过了什么?

在我用来创建缓存项池的代码下方:

以及使用它的代码:

当我在运行时查看代码时,AbstractAdapter选择给我一个PhpFilesAdapter(我猜在开发中足够公平)。

但是当我查看这个适配器的代码时,我发现:

因此,除了到期日期之外,根本没有任何逻辑可以检查到期。

您是否知道在文件更改时使缓存无效的方法(当然是在开发环境中)?或者我必须自己实现它..?

谢谢你的帮助。

0 投票
3 回答
184 浏览

azure - Azure - 向所有其他角色发送消息并等待响应

我在多实例 Web 应用程序中需要的一个非常常见的模式是在所有实例上使 MemoryCaches 无效 - 并等待确认这已经完成。(因为用户可能会在刷新后突然看到另一个实例上的旧数据)

我们可以通过以下组合来实现:

  • Azure服务总线,
  • 向主题发送消息
  • 其他实例将带有回复的消息发送回原始实例
  • 有一个等待循环来等待消息返回,
  • 首先要知道还有多少其他实例。
  • 可能有一些超时,因为如果实例在两者之间崩溃会发生什么?

我认为解决所有这些小边缘情况可能需要做很多工作——所以在我们重新发明轮子之前——是否已经有一个通用的模式或库来解决这个问题?

(当然,一种解决方案是使用像 Redis 这样的共享缓存,但在某些情况下,内存缓存要快得多)

0 投票
0 回答
128 浏览

caching - 缓存失效;当没有任何迹象表明数据已更改但可能已更改时,重新获取实践?

在学习 GraphQL 和 Apollo 时,我浏览了这个教程系列

它展示了如何创建一个应用程序,它具有:

  • 频道列表视图 ( /)
    • 显示所有频道
    • 允许打开频道详细信息视图
    • 允许创建新频道
  • 频道详细信息视图(即/soccer
    • 显示添加到频道的消息
    • 允许用户添加新消息

Apollo 默认缓存查询,这会带来一个问题:

  1. 打开通道(/soccer),第一次,缓存中没有数据,执行查询并将结果存储在缓存中
  2. 返回频道列表视图
  3. 打开不同的频道 ( /baseball)
  4. 其他访客添加消息/soccer
  5. 返回频道列表视图
  6. 打开通道 ( /soccer),由于存储中存在数据 - 加载过时的数据,因为没有任何内容表明数据过时并且应该重新获取

我似乎找不到一个合理的方法来解决它。不是在寻找代码,只是一些关于如何使用 GraphQL 处理它的良好实践。

我尝试更改fetchPolicycache-and-network,但它不要求提供更多数据 - 同样适用,没有任何内容表明数据已过时。network可行,但这会绕过缓存 - 当它符合要求时,这是一个可行的解决方案,但我实际上并不想要一些缓存。

我想到的可能选项:

  • 单独查询:一个用于主频道详情,一个用于消息。将消息设置fetchPolicynetwork。可行的选项,但发送已经可用的数据。
  • 单独的查询。消息正在分页。加载时确定是否首先加载和fetchMore
  • 利用通知服务器端事件的 GraphQL 订阅,使用它来确定是否应该重新获取。介绍了许多其他细微差别,例如,如果我已经离开频道 X,我应该听多长时间的事件。

我知道这取决于项目,但还有哪些其他选择,哪些是受欢迎的,为什么?

0 投票
1 回答
419 浏览

postgresql - 使任何缓存失效(刷新)的合理时间间隔是多少?

我们决定使用缓存(不决定具体的缓存),但今天知道我们需要通过连接到数据存储,使缓存数据失效或每 2 分钟刷新一次缓存数据,但我认为 2 分钟是不可行的,因为如果你每2分钟刷新一次缓存数据,那么最好连接到数据存储本身,所以任何人都可以建议什么是可行的时间间隔,我们可以设置使旧日期的缓存无效并刷新缓存数据存储中的数据?

注意:我们使用的是spring boot,postgres

0 投票
0 回答
411 浏览

mysql - 由于 MySQL 主从同步延迟导致 memcached 不一致

我们最近切换到 MySQL 主/从架构。我们对主机进行所有写入和关键读取,对从机进行所有读取。主/从架构设计如下。

在此处输入图像描述

现在,如果我们缓存从从属机器读取的数据,可能会由于 master => slave 同步延迟而在 Memcached 中创建陈旧对象。

暂时,我们通过在 Memcached 中创建对象时添加 5 分钟到期来解决这个问题。假设同步将在 5 分钟内完成。现在,即使是这 5 分钟的延迟,我们也不能接受。

解决此问题的另一种方法可能是 Facebook 通过更改 MySQL 解析器并将密钥传送到从机来解决。

有没有其他方法可以解决这个问题?

0 投票
0 回答
365 浏览

caching - Redux-persist:处理项目删除,不是从应用程序发起的

假设您有两个用于相同服务的待办事项列表应用程序,使用相同的数据库 - 一个 web 应用程序和一个 react 本机应用程序。用户可以在两者上登录到他们的帐户并从两者中创建/更新/删除他们的笔记。

考虑那些应用程序正在使用 redux-persist,例如,本机应用程序将商店持久化到 AsyncStorage 并在应用程序启动时对其进行水合,因此用户可以更快地看到他们的笔记。

考虑一个用户有 2 个待办事项并使用两个应用程序登录,两个待办事项存在于 db 中,以及 webapp 和 react native 应用程序的 redux 商店中。然后用户关闭 react native 应用并从 webapp 中删除一个 todo 项。由于是 webapp 发起了删除,因此调度了一个动作,并且从 webapp 的 store 和持久层(例如 localstorage)中清除了该项目。但是,react native 应用程序处于离线状态,因此,当用户启动 react native 应用程序时,它的 store 会从 AsyncStorage 中获取水分,并且已删除的 todo 项会显示给用户。这种情况如何解决?

如果用户从应用程序中删除了一个待办事项,很容易跟踪该项目已被删除(因为调度了一个动作)并从持久层中清除它,但是如果该动作是由另一个应用程序调度的(如在示例 - 由 web 应用程序,与反应本机应用程序相反),甚至是管理员从数据库中手动删除的?我必须以某种方式区分已删除的项目和未删除的项目。如何?

我考虑过一种方法,例如:“当获取待办事项时,将它们全部从持久层中清除”但是如果我有几种获取它们的方法 - 例如按标签,按日期,这看起来不太合适等,在这种情况下,我最终会清除我需要的东西。

您可以建议什么解决方案/模式来解决此类问题?

0 投票
1 回答
1308 浏览

mysql - 如何用mysql使redis缓存失效?

我想用redis作为mysql的缓存,主要思路是:

询问

  1. 从 redis 读取

  2. 如果不存在,则从mysql中读取,并添加到redis缓存中

添加

  1. 直接写入mysql

更新&删除

  1. 写入mysql
  2. 使redis的缓存失效

我的问题是:如何使缓存无效?

我知道我可以删除它,或者设置过期时间,这是通常的方式,还是有任何标准方法可以使缓存失效?

谢谢!

0 投票
1 回答
26515 浏览

javascript - 强制浏览器在 Angular 环境中清除缓存

关于如何在 VanillaJS 应用程序中强制清除浏览器缓存有一个流行的问题,普遍的共识是,将 .js-script 的名称或脚本参数设置为新值:强制浏览器清除缓存

如何使用 Angular(AngularCLI/Webpack 构建中的当前 5.1)实现这一点,所以每次我在生产中(使用 AOT)发布代码时,都会构建一个新版本?我会使用日期散列而不是索引,但主要问题是:我可以在哪里设置它(例如脚本名称/参数)?在开发中,CLI 负责重建应用程序,这不是问题,只是在生产中!