问题标签 [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 投票
1 回答
859 浏览

java - 在获取时刷新 Infinispan 中条目的过期时间

我一直在 infinispan 的文档中搜索,但找不到在自动获取后刷新条目过期时间的简单方法。

今天我注册了一个监听器,在@CacheEntryVisited 事件中,我将其移除并再次放入其中,但这当然并不理想。

可以在 CacheManager 中使用某种配置来进行此刷新?

提前致谢

0 投票
1 回答
1298 浏览

caching - Redis 上的优雅失效

我正在尝试找到像 Varnish 这样的产品,它可以让我处理缓存中的 grafecul 失效,这基本上是保证客户端缓存时间的能力,因为当键值无效或过期时,不是客户端本身从源端获取内容需要等待很长时间,但始终是缓存系统单独为客户端执行此操作,同时客户端即使缓存内容无效也只能获取缓存内容。

场景示例:

缓存值有效的场景。

1)客户端->缓存有效->缓存对象

缓存值无效的场景。

1)客户端->缓存无效->旧缓存对象

2)缓存系统->原点->替换旧缓存对象

有什么方法可以进行此预取,以确保客户端使用 Redis 获得缓存响应时间?

0 投票
2 回答
1743 浏览

caching - 使用 ASP.NET 样板从内存缓存中刷新权限

当我通过运行 SQL 更新脚本为数据库中的用户显式设置权限时,具有最新授权的特定权限不会反映在系统中。但是,当我回收 IIS 进程或重建解决方案时,它似乎才更新。

看起来框架正在使用某种内存存储来检查权限。

ABP 中是否有“强制刷新”功能,我可以调用它来使用数据库中的最新权限刷新内存存储?

奇怪的是,通过前端设置权限时,权限在没有IIS回收的情况下按预期工作,所以它肯定会调用某种函数来更新它的缓存。

0 投票
1 回答
610 浏览

docker - Docker 缓存失效

我的自定义 Dockerfile 有一些奇怪的问题,在 alpine 容器中编译 .Net 核心应用程序。

我尝试了许多不同的配置都无济于事 - 当我实现最终FROM指令时缓存总是无效(如果我评论它以及它下面的所有内容,缓存工作正常)。这是文件:

有任何想法吗?提示?提示?明显的错误?我检查了每一层,COPY . ./指令只复制我期望它的文件——而且它们在构建之间都没有改变。

还值得注意的是,如果我删除最后一条 FROM 指令(和其他相关行),缓存会完美运行 - 但最终图像大小显然比基本microsoft/dotnet:2.1-aspnetcore-runtime-alpine3.7图像(172Mb 对 1.8Gb)大得多。我试过只是在 之后注释掉COPY指令FROM,但它不会影响缓存失效。以下按预期工作:

.dockerignore 下面:

最后一点信息:我正在使用 docker-compose 构建容器 - 特别是通过运行docker-compose build myservicename,但构建图像docker build -f src/MyAssembly/Dockerfile -t MyImageName .会产生相同的结果。

0 投票
1 回答
1138 浏览

html - 如何确保以前的访问者看不到旧的 HTML 页面?

我看到很多关于强制缓存重新加载的答案,推荐了一个包含 HTML 页面本身的解决方案。

但是,当您的旧网站被编写为index.html主页时,现在您将其替换为新内容,您如何确保回访者看到新内容?

旧网站曾经index.html作为索引页面(在nginx's 配置中),我现在已更改为index.php. 但是每当我从以前访问过它的浏览器访问它时,它仍然会打开缓存的旧index.html页面。新的浏览器将index.php正确加载。

我发现的一个看似正确的答案是告诉为该部分nginx设置,这将强制缓存无效;但由于某种原因,这不起作用。expires -1;server {}

当然,需要发生的是访问者将始终获得新页面,而无需自己明确发出刷新。

据推测,解决方案应该是通过标头使缓存无效。但是怎么做?

编辑以解决所有建议的评论和答案

  1. 就像我在回答的第一段中所说的那样,这个问题不是通过编辑索引文件来解决的(比如为“缓存清除”添加参数),因为索引文件本身已经被缓存了,这就是问题所在。
  2. 我的问题中没有提到 javascript 或 CSS 文件。同样,它是index.html已缓存的文件。
  3. 存在index.htmlindex.php不会产生冲突。index.html整个系统工作正常,只有在服务器配置中设置为索引页面时,之前访问过该页面的老访问者,index.html即使在索引更改为index.php. 这也很容易证明,即使在index.html文件被完全删除后,这个问题仍然存在。因为一旦浏览器缓存了一个 HTML 文件,它就不再向服务器询问索引文件是什么,它只是显示它缓存的内容。

所以完整的场景是这样的:

  1. 该网站已index.html在服务器配置中设置为索引页面
  2. 浏览器访问网站
  3. 浏览器缓存主页
  4. 服务器配置中的索引页面更改为index.php
  5. 同一个浏览器访问网站
  6. index.html浏览器显示从以前缓存

在数字 5. 中,如果我用新的浏览器访问该网站,它将显示位于 中的新主页的内容index.php。所以问题是,我如何让旧浏览器忘记它缓存的内容,并加载新的主页?

0 投票
2 回答
1520 浏览

caching - 我们什么时候执行缓存失效?

来自 Wiki 关于缓存失效的摘录 - “缓存失效是计算机系统中的一个过程,其中缓存中的条目被替换或删除。” 但是,到底为什么我们需要使 Cache 失效呢?我只能想到可能的情况 - 如果由于某种原因缓存和数据库不同步,缓存中的数据将是陈旧的。要同步它,我们需要使缓存无效。但是,缓存和数据库同步(除了数据尚未写入两者的短时间内)不是理想的行为。因此,如果我们发现缓存不包含正确的数据,缓存失效可以作为一种补救措施。这是它的唯一目的吗?

0 投票
2 回答
127 浏览

file - 文件修改时间对于缓存失效是否可靠?

每次修改文件时,我都想使一些本地生成的缓存失效。手动运行某些命令行工具时会发生失效(无需实时观看)

我的方法是:

  1. 首先生成缓存并存储文件修改日期。
  2. 在随后的运行中检查文件修改日期是否与存储的不同 - 如果是:使缓存无效,并再次生成它。

是否使用文件修改日期足以使这种方法可靠,或者如果文件修改日期没有更改,我是否还应该检查文件快捷方式(一些哈希函数)(误报不是问题,但每次文件时都需要使缓存失效已经改变)。

文件将使用 VCS 和云存储(如 Dropbox 或 OneDrive)共享。

问题与操作系统无关(即它必须在每个常用操作系统(Windows、Mac OS、其他 POSIX 兼容)上工作)。

0 投票
1 回答
287 浏览

amazon-web-services - 如何清除多个发行版的缓存,包括列出它们?

首先我想和大家打个招呼,其次我很害怕,因为我刚得到一份新工作,我的任务之一是我这辈子从未做过的事情。在这种情况下,我分配的任务是找到一种从 S3 Cloudfront 分发中删除缓存的方法。我试图查看是否有一种方法可以列出所有发行版,然后使用脚本从它们中清除缓存,但我找不到这是否可能以及脚本应该是什么样子。

我的想法是有一个 cli 脚本,它将:

A) 在 txt 文件输出中列出所有分布;B) 从该输出中读取分布 ID,然后使用该输出清除其当前缓存。

因此,在上传新文件后,可以在发行版上创建新的缓存。我已阅读https://docs.aws.amazon.com/cli/latest/reference/cloudfront/list-distributions.html但不幸的是,我无法掌握脚本如何列出所有分发 ID > 分发.txt 然后从中读取以删除其缓存。

如果可能的话,我可以阅读到创建这样一个脚本的任何提示或信息都会非常有帮助,因为我真的很紧张并且害怕我的第一个任务。

想要对所有阅读过该主题的人表示感谢,即使他们没有任何提示可提供:)。

0 投票
1 回答
272 浏览

c# - Entity Framework DbContext 检测来自外部的更改

我确定这是重复的,但在搜索互联网后我找不到问题。因此,如果这是重复的,请指出正确的。

问题:我怎样才能让实体框架拾取从另一个来源发生的数据库中实体中的更改。

由于未更新 DbContext 缓存,我在这类事情上遇到了很多问题。

示例:假设我有 2 台具有相同架构的服务器。两台服务器一起工作并且都使用该表Person

  1. 服务器 A 创建Jack一个年龄为 21 岁的人,并将其保存到数据库中。Jack缓存在服务器 A 的 DbContext 中。
  2. 服务器 BJack在服务器 A 创建数据库后从数据库中获取。然后,服务器 BJack将年龄更新到 22 岁,并将其保存到数据库中。
  3. 向服务器A 发出请求Jack。因此,服务器 A 的 DbContext 以Jack缓存中的版本进行响应……年龄仍为 21 岁。

我很难相信服务器 A 的 DbContext 没有办法重新获取记录。我觉得这种能力应该融入到实体框架中。如果没有,那我还有什么其他选择?

我想到的一种选择是告诉实体框架不要使用缓存。这可能吗?

0 投票
1 回答
23 浏览

amazon-s3 - 如果一切都已设置好,修改 S3 对象将反映在云端

假设我已经设置了 s3 存储桶和 Cloudfront 发行版。指向它。有一个 CSS 文件,我可以通过 Cloudfront 获取对 CSS 的请求。

现在,如果对 CSS 进行更新并上传到 s3 存储桶,它会在没有 Cloudfront 缓存失效的情况下工作,还是应该在 Cloudfront 上缓存失效。

有人可以对此有所了解。