问题标签 [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.
google-chrome - 使用 Webpack 缓存失效
我将hash
id 附加到由webpack
. 每当我得到一个新的构建时,我都会看到文件名被新的哈希更改,并且index.html
文件正在引用这些文件。但是在部署我的应用程序后,一些使用 Chrome 的用户在从应用程序注销之前看不到新文件。有没有人遇到过这个问题,知道有什么解决办法吗?
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.使缓存无效并重新启动
- 从C:\Users\suraj.gradle\caches\3.3删除脚本和脚本重新映射的文件
并且还检查了stackoverflow中的许多帖子,但对我没有任何作用,而且这里提出的大多数问题都没有得到任何人的回答。
在我的项目结构下
编译SDK版本:Api 25
构建工具版本:25.0.2
php - Symfony 3.1 缓存组件中的缓存失效
我使用 Symfony 3.1 的缓存组件来为我的实体存储一些自定义元数据。一旦与这些元数据关联的任何文件发生更改,我想立即使其无效。
我没有找到一种方法来告诉 Symfony 或缓存组件特别注意一组特定文件的变化,我错过了什么?
在我用来创建缓存项池的代码下方:
以及使用它的代码:
当我在运行时查看代码时,AbstractAdapter
选择给我一个PhpFilesAdapter
(我猜在开发中足够公平)。
但是当我查看这个适配器的代码时,我发现:
因此,除了到期日期之外,根本没有任何逻辑可以检查到期。
您是否知道在文件更改时使缓存无效的方法(当然是在开发环境中)?或者我必须自己实现它..?
谢谢你的帮助。
azure - Azure - 向所有其他角色发送消息并等待响应
我在多实例 Web 应用程序中需要的一个非常常见的模式是在所有实例上使 MemoryCaches 无效 - 并等待确认这已经完成。(因为用户可能会在刷新后突然看到另一个实例上的旧数据)
我们可以通过以下组合来实现:
- Azure服务总线,
- 向主题发送消息
- 其他实例将带有回复的消息发送回原始实例
- 有一个等待循环来等待消息返回,
- 首先要知道还有多少其他实例。
- 可能有一些超时,因为如果实例在两者之间崩溃会发生什么?
我认为解决所有这些小边缘情况可能需要做很多工作——所以在我们重新发明轮子之前——是否已经有一个通用的模式或库来解决这个问题?
(当然,一种解决方案是使用像 Redis 这样的共享缓存,但在某些情况下,内存缓存要快得多)
caching - 缓存失效;当没有任何迹象表明数据已更改但可能已更改时,重新获取实践?
在学习 GraphQL 和 Apollo 时,我浏览了这个教程系列。
它展示了如何创建一个应用程序,它具有:
- 频道列表视图 (
/
)- 显示所有频道
- 允许打开频道详细信息视图
- 允许创建新频道
- 频道详细信息视图(即
/soccer
)- 显示添加到频道的消息
- 允许用户添加新消息
Apollo 默认缓存查询,这会带来一个问题:
- 打开通道(
/soccer
),第一次,缓存中没有数据,执行查询并将结果存储在缓存中 - 返回频道列表视图
- 打开不同的频道 (
/baseball
) - 其他访客添加消息
/soccer
- 返回频道列表视图
- 打开通道 (
/soccer
),由于存储中存在数据 - 加载过时的数据,因为没有任何内容表明数据过时并且应该重新获取
我似乎找不到一个合理的方法来解决它。不是在寻找代码,只是一些关于如何使用 GraphQL 处理它的良好实践。
我尝试更改fetchPolicy
为cache-and-network
,但它不要求提供更多数据 - 同样适用,没有任何内容表明数据已过时。network
可行,但这会绕过缓存 - 当它符合要求时,这是一个可行的解决方案,但我实际上并不想要一些缓存。
我想到的可能选项:
- 单独查询:一个用于主频道详情,一个用于消息。将消息设置
fetchPolicy
为network
。可行的选项,但发送已经可用的数据。 - 单独的查询。消息正在分页。加载时确定是否首先加载和
fetchMore
。 - 利用通知服务器端事件的 GraphQL 订阅,使用它来确定是否应该重新获取。介绍了许多其他细微差别,例如,如果我已经离开频道 X,我应该听多长时间的事件。
我知道这取决于项目,但还有哪些其他选择,哪些是受欢迎的,为什么?
postgresql - 使任何缓存失效(刷新)的合理时间间隔是多少?
我们决定使用缓存(不决定具体的缓存),但今天知道我们需要通过连接到数据存储,使缓存数据失效或每 2 分钟刷新一次缓存数据,但我认为 2 分钟是不可行的,因为如果你每2分钟刷新一次缓存数据,那么最好连接到数据存储本身,所以任何人都可以建议什么是可行的时间间隔,我们可以设置使旧日期的缓存无效并刷新缓存数据存储中的数据?
注意:我们使用的是spring boot,postgres
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 应用程序,与反应本机应用程序相反),甚至是管理员从数据库中手动删除的?我必须以某种方式区分已删除的项目和未删除的项目。如何?
我考虑过一种方法,例如:“当获取待办事项时,将它们全部从持久层中清除”但是如果我有几种获取它们的方法 - 例如按标签,按日期,这看起来不太合适等,在这种情况下,我最终会清除我需要的东西。
您可以建议什么解决方案/模式来解决此类问题?
mysql - 如何用mysql使redis缓存失效?
我想用redis作为mysql的缓存,主要思路是:
询问
从 redis 读取
如果不存在,则从mysql中读取,并添加到redis缓存中
添加
- 直接写入mysql
更新&删除
- 写入mysql
- 使redis的缓存失效
我的问题是:如何使缓存无效?
我知道我可以删除它,或者设置过期时间,这是通常的方式,还是有任何标准方法可以使缓存失效?
谢谢!
javascript - 强制浏览器在 Angular 环境中清除缓存
关于如何在 VanillaJS 应用程序中强制清除浏览器缓存有一个流行的问题,普遍的共识是,将 .js-script 的名称或脚本参数设置为新值:强制浏览器清除缓存
如何使用 Angular(AngularCLI/Webpack 构建中的当前 5.1)实现这一点,所以每次我在生产中(使用 AOT)发布代码时,都会构建一个新版本?我会使用日期散列而不是索引,但主要问题是:我可以在哪里设置它(例如脚本名称/参数)?在开发中,CLI 负责重建应用程序,这不是问题,只是在生产中!