问题标签 [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.
node.js - 如何使 NodeJS 中 S3 上特定文件夹的 cloudfrontcahce 无效?
我想使节点 js 中 s3 存储桶中的文件夹(和子文件夹)无效。这是我目前正在使用的脚本:
这就是我得到的答案:
amazon-web-services - AWS CloudFront 错误调用 CreateInvalidation 操作时发生错误 (NoSuchDistribution):指定的分配不存在
拥有 Cloud Front 策略的用户
但出现错误:AWS CloudFront 错误调用 CreateInvalidation 操作时发生错误 (NoSuchDistribution):指定的分配不存在。
database - 是否有一个开源组件可以订阅各种数据库活动提要并使 Redis 等进程外缓存失效?
我们正在寻求实现一个基于 redis 的缓存来读取大量数据,以便将我们的数据库作为读取缓存。我想实现一种更好的失效机制,而不是仅仅基于 TTL 或 LRU 的驱逐,以尽可能地防止过时的读取。
一些数据库为诸如表之类的数据库对象提供通知机制。例如 oracle 有Change Notifications而 Postgresql 有NOTIFY用于此目的。是否有任何现有的开源项目/组件可以监听这些通知并使用它们使进程外缓存(如 redis 或 memcached)无效?我已经看到了几个对进程内缓存执行此操作的项目,但到目前为止还没有一个针对进程外(集群/非集群)缓存的项目。
sql - 从预定义查询列表中查找哪些 SQL 查询受 INSERT、UPDATE 或 DELETE 影响
介绍
我正在构建一个缓存系统,其中缓存的每个节点都可以从具有 0-n 参数的预定义、有限的 SQL 查询集中调用任意数量的 SQL 查询。
根据这些查询的结果,节点执行相当慢的计算并返回一个缓存的值。
查询可能如下所示:
查询 #1:
查询 #2:
其他查询可能使用连接,没有参数或有多个参数,但查询的数量是有限的。
我跟踪每个节点调用的查询和参数集,并建立一个依赖关系列表。然后当查询结果发生变化时,我知道我需要使依赖它的所有缓存节点无效并重新计算它们的值。
问题的核心
现在,困难的部分是知道在我执行 INSERT、UPDATE 或 DELETE 时哪些查询和参数集受到影响。
例子
此操作将影响带有参数的查询#1 ['foo']
,并且所有依赖于具有这些参数的查询的缓存节点都应该失效。
此操作不会影响查询 #1,因为它不依赖列birth_date
来构建其结果。
['bar']
即使在操作后没有行与查询 #1 匹配,这也会影响带有参数的查询 #1。
第一个解决方案
我想出的解决方案有效,但肯定需要改进。
- 对于数据库上的每个操作,跟踪一组受影响的行和列:
INSERT
:考虑插入的行及其所有列
UPDATE
:考虑更新之前和之后的行,仅包含更新的列。您最终得到 2 行
DELETE
:考虑删除之前的已删除行及其所有列 - 对于在步骤 1 中找到的每一行,找出所有可能受到影响的查询。这是我今天做大量体力工作的地方。我目前正在手动列出每个查询的所有依赖项。示例
Q1
:
需要注意的一些有趣的事情:
- 一个查询在使用join时可能会依赖多个表,所以dependencies是一个数组
- 我列出了查询所依赖的列,因此可以跳过其他列的更新
- 通过查看表和列,我们知道行会影响查询
- 我们需要根据行找到参数集。
结果是一个数组,因为一行可能会影响具有多个参数集的同一查询。在这个基本示例中,数组的长度仅为 1,因为该行使用 1 个参数集影响查询。
现在考虑以下查询:
基于步骤 1,我们构建两行:
{ id: 'foo' }
: 更新前行的值{ id: 'bar' }
: 更新后行的值
请注意,两行都只有id
列,因为我们只更新了这一列。现在查看我们在上面构建的依赖项数组,我们知道两行都会影响查询Q1
,因为表匹配,并且列重叠(它们都有id
列)。
要找到参数集,我需要getParams
为每一行调用并将结果展平:
[['foo'], ['bar']]
.
就是这样。我们现在使所有依赖于Q1
参数集['foo']
或的缓存节点无效['bar']
。
开放式问题
我正在寻找我可能忽略的任何其他路线。最重要的是,我正在寻找一种自动构建每个查询的依赖关系的方法,手动完成是缓慢、困难且容易出错的。
amazon-web-services - AWS cloudfront 在 Google Chrome 中提供过时的内容?
我在 AWS s3 中安装了一个反应应用程序。我正在使用 AWS CloudFront 提供内容。我在应用程序中进行了一些更改,并在 CloudFront 中进行了失效。它在除 Google Chrome 之外的所有浏览器中提供更新的内容。谷歌浏览器使用旧内容加载页面。你能告诉我为什么会这样吗?
谢谢你。
javascript - 如何使查询字符串中包含“{”的 CDN URL 无效
下面是包含查询字符串参数的请求 url,我已经使用 CDN 成功缓存了它。但我无法从缓存中清除请求 url 或使其无效。
url - /search/name?parent=true&filter={"age":5,"skip":0,"where":{"address.pincode":"403003"},"include":["name", "姓氏”,“地址”]}
错误消息 - “您的请求包含一个或多个失效失效路径。”
caching - 缓存和缓存失效不起作用 GCP Cloud CDN
使用 https 负载均衡器实现 GCP Cloud CDN 时遇到问题。Https 负载均衡器使用的是公共的后端存储桶。我从邮递员那里得到输出,但是当在负载均衡器日志中调试时,随机缓存命中有时是真实的,而不是其他时间命中跟随文档 https://cloud.google.com/cdn/docs/caching
缓存无效也不起作用。 https://cloud.google.com/cdn/docs/cache-invalidation-overview
node.js - 使 TypeORM Redis 缓存失效
我正在使用 NodeJs (Typescript)、MySQL、Redis 和 TypeORM,我有一个关于 Redis 缓存失效的问题。
让我举一个用例,假设有 100 个国家和与这些国家相关的不同产品(假设数据库中有几百万个产品)
然后是根据自己的国家搜索产品的用户。也可以通过搜索条件,比如说搜索所有来自日本的电子类产品,其中包含单词磨床。我想缓存这些搜索至少一两天,但是当我们说数据库中的产品价格发生变化时会出现问题,我想使缓存无效,但由于我无法为该动态搜索条件提供固定标识符,我是无法使 Redis 中的特定卡盘无效。
我已经阅读了缓存的 TypeORM 文档,但我不建议这样做。
请建议是否有可能使用 TypeORM 来解决上述问题或任何解决方法,例如手动使用 Redis Client 和 TypeORM 来添加、获取和使数据无效。
任何帮助,将不胜感激。
node.js - Redis - 基于标签的失效驱逐策略
我想实现一个 Redis 缓存,它应该能够基于标签使键失效。
例如,要缓存一个帖子列表查询,缓存看起来像
以开头的条目tags
包含一组缓存键,其中存在给定的实体,因此要使特定帖子的缓存无效,我将获取其标签并del
为所有它们触发查询。
我正在努力解决的部分是驱逐政策。通常,allkeys-lru
首选是 ,但是,我需要确保在查询仍在缓存时标签不会随机消失,因为如果 redis 驱逐tags:post:1
,我将无法使其缓存无效。
我看了看,volatile-ttl
以为我ttl
在数据上设置为 3h,但在标签上设置为 4h,这样 Redis 应该更喜欢将标签保留更长时间,但是这lru
部分不起作用。我觉得这有一些隐藏的问题。
我该怎么办?我曾考虑将标签保存在单独的数据库中,但驱逐策略是针对每个实例,而不是针对每个数据库。
我应该将标签存储在单独的实例中吗?
reactjs - AWS Cloudfront 缓存失效路径使用情况
我在云端使用s3存储桶作为源来缓存和托管我的reactjs网站。
在 s3 上的每次部署之后,我想使我的云端分发的缓存无效,以便用户可以获得部署的最新版本。
此外,在阅读云端失效的定价时,我想确保我不超过每月1000 条路径的免费套餐。另外,我们在一个月内没有超过 10 或 20 个部署到生产环境。每个部署在目录中都有大约 500 个文件:
所以我的问题是:如果我"/*"
用作失效查询,它会被视为1 路径吗?或者它将是500 条路径?