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

javascript - 多态内联缓存如何与可变类型一起使用?

多态内联缓存(PIC)通过按对象类型缓存实际方法来工作,以避免昂贵的查找过程(通常是哈希表查找)。

如果类型对象是可变的(即该方法可能在运行时被猴子修补成不同的东西),如何处理类型比较?

我想出的一个想法是一个“类计数器”,每次调整方法时都会增加,但是这似乎在一个猴子补丁严重的环境中会异常昂贵,因为它会杀死所有的图片那个类,即使它们的方法没有改变。

我确信必须有一个好的解决方案,因为这个问题直接适用于 JavaScript,并且 AFAIK 所有三个大型 JavaScript 虚拟机都有 PIC。

0 投票
9 回答
46615 浏览

algorithm - 缓存失效——有通用解决方案吗?

“计算机科学只有两个难题:缓存失效和命名事物。”

菲尔·卡尔顿

是否有使缓存无效的通用解决方案或方法;知道条目何时过时,从而保证始终获得最新数据?

例如,考虑一个getData()从文件中获取数据的函数。它根据文件的最后修改时间对其进行缓存,每次调用时都会对其进行检查。
然后添加第二个函数transformData()来转换数据,并在下次调用该函数时缓存其结果。它不知道文件 - 你如何添加如果文件被更改,这个缓存变得无效的依赖关系?

您可以在getData()每次调用时transformData()调用并将其与用于构建缓存的值进行比较,但这最终可能会非常昂贵。

0 投票
1 回答
370 浏览

c - 基准测试时如何使缓存无效?

我有这段代码,当交换 UsingAs 和 UsingCast 的顺序时,它们的性能也会交换。

输出:

这样做的时候...

...结果:

做这个的时候...

...结果:

这样做时:

...结果:

除了独立运行它们之外,如何使缓存无效,以便第二个被基准测试的代码不会收到第一个代码的缓存内存?

抛开基准测试不谈,只是喜欢现代处理器执行这种缓存魔法的事实:-)

[编辑]

建议尝试这个更快的代码(据说)......

...结果是这样的:

比上面两个代码慢

[编辑]:

建议将每个例程交给他们自己的副本...

...输出:

现在他们得到了相同的结果,谢谢 Remus!

分别运行 Cast 和 As,它们也产生相同的结果(即 282)。现在,至于为什么当他们收到自己的数组副本时它们变得更快(从 322 到 282 毫秒),我无法从中做出任何事情:-) 这完全是另一回事

0 投票
1 回答
1346 浏览

django - 在 Django 中使保存()上的 Memcached 键无效

我在 Django 中有一个视图,它使用 memcached 为依赖于相对静态数据集的流量更高的视图缓存数据。关键字是相对的:当数据库中发生更改时,我需要使特定 URL 数据的 memcached 键无效。为了尽可能清楚,这是视图的肉和土豆(Person 是一个模型,缓存是 django.core.cache.cache):

我想要做的是以“未格式化”形式获取那个 cache_key 变量,但我不知道该怎么做——如果它可以做到的话。

以防万一已经有事情要做,这就是我想要做的(这是来自 Person 模型的假设保存方法)

我正在考虑为这种类型的东西制作一个视图类,并在其中包含类似的功能,remove_cache或者generate_cache因为我经常做这种类型的东西。那会是一个更好的主意吗?如果是这样,如果它们在一个类中,我将如何调用 URLconf 中的视图?

0 投票
3 回答
1393 浏览

php - Smarty 缓存文件失效

我想稍微深入一点 Smarty 缓存,所以我有一些简单的问题......

  1. 为了操纵缓存失效,我想知道 Smarty 将其缓存存储在哪个目录中。例如,与user_id=123我要存储在cache/users/123/. cachesmarty缓存目录在哪里。如何告诉 smarty 存储与user_id=123at相关的缓存cache/users/123/?Smarty 是否也会在此目录中存储子模板的缓存?

  2. 有没有关于清理这个目录中的缓存的建议?我认为,如果某些访问者当前正在访问此页面,则简单地从该目录中删除文件可能会导致一些错误(当 smarty 看到找到模板缓存时会发生错误,但由于它已经被删除,所以找不到子模板缓存,例如)。

任何建议和意见表示赞赏。

谢谢你。

0 投票
1 回答
76 浏览

performance - 添加新帖子时缓存的类别页面(page1,page2等)无效?

假设我们有 blog 的 category A。类别A目前在 100 页上有 1000 个帖子。所有页面都缓存在文件中(例如,由 Smarty 模板引擎缓存)。我正在添加帖子并希望它立即显示在第一页上。因此,我必须清除或使所有 100 个 A 类页面的缓存无效。

删除缓存页面不是一个好主意,因为我们可能有太多文件(例如,数千个页面)。我认为使缓存无效并根据请求重新生成页面是更有效的方法。

我唯一的想法是添加number of posts in category到缓存ID。因此,首先我们应该获取类别中的帖子数量(例如,来自 memcache),然后检查缓存版本是否通过该数量有效。

一切看起来都很好而且很简单。但是让我们想象一下我添加新帖子然后在 1 分钟后删除另一个(旧)帖子的情况。帖子数量仍为 1000,并且某些类别页面将保持旧状态(如果在这 1 分钟内未查看它们)。

解决办法是什么?

PS:对不起我的英语,但我认为我的问题对于已经遇到过此类问题的人来说会很清楚。

谢谢

0 投票
1 回答
984 浏览

c++ - C++ 使用 `.reserve()` 填充 `std::vector` 以防止多线程缓存失效和错误共享

我有一个具有如下所示一般结构的程序。基本上,我有一个对象向量。每个对象都有成员向量,其中一个是包含更多向量的结构向量。通过多线程,对象被并行操作,进行涉及大量访问和修改成员向量元素的计算。一个对象一次只能被一个线程访问,并被复制到该线程的堆栈中进行处理。

问题是该程序无法扩展到 16 个内核。我怀疑并被告知问题可能是错误共享和/或缓存失效。如果这是真的,那么原因似乎一定是向量分配的内存彼此太近,因为据我了解,这两个问题(简单来说)都是由不同处理器同时访问的近端内存地址引起的。这种推理是否有意义,这可能会发生吗?如果是这样,我似乎可以通过使用 .reserve() 填充成员向量来增加额外的容量来解决这个问题,在向量数组之间留下大量的空内存空间。那么,这一切有意义吗?我完全出去吃午饭了吗?

0 投票
3 回答
3058 浏览

jekyll - 基于 Jekyll Bootstrap 的博客 - 标题过期?

我有一个基于 Jekyll 引导的博客,托管在 Github 页面上。

我的问题是:每次我在网页上更改某些内容时,我都必须强制重新加载页面(CTRL + R)才能看到更改。

Jekyll 或我的浏览器似乎没有意识到有更新的版本可供发送。

如何配置 Jekyll 以更好地处理这个问题?

0 投票
2 回答
3139 浏览

caching - 获取代表用户 CanCan 能力的字符串

我想缓存一个Post视图,但该视图取决于当前用户的权限(例如,我只显示“编辑”链接 if current_user.can?(:edit, @post)

所以我希望我的缓存键包含当前用户的 CanCan 能力的表示,这样当用户的能力发生变化时我可以使缓存失效

SO:如何获得代表当前用户能力的字符串,以便具有相同能力的 2 个不同用户生成相同的“能力字符串”?

我试过user.ability.inspect了,但这不会为具有相同能力的不同用户产生相同的字符串

0 投票
1 回答
2842 浏览

caching - Doctrine 2 结果缓存失效

我在检索用户(消息应用程序)的新消息数量的查询中使用 Doctrine 2 的结果缓存:

我试图像这样使这个缓存无效(在我的实体存储库中):

这样我就不需要在我网站的每个页面上进行无用的查询。

我的问题:这是推荐的做法吗?我最终会遇到问题吗?