问题标签 [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.
javascript - 多态内联缓存如何与可变类型一起使用?
多态内联缓存(PIC)通过按对象类型缓存实际方法来工作,以避免昂贵的查找过程(通常是哈希表查找)。
如果类型对象是可变的(即该方法可能在运行时被猴子修补成不同的东西),如何处理类型比较?
我想出的一个想法是一个“类计数器”,每次调整方法时都会增加,但是这似乎在一个猴子补丁严重的环境中会异常昂贵,因为它会杀死所有的图片那个类,即使它们的方法没有改变。
我确信必须有一个好的解决方案,因为这个问题直接适用于 JavaScript,并且 AFAIK 所有三个大型 JavaScript 虚拟机都有 PIC。
algorithm - 缓存失效——有通用解决方案吗?
“计算机科学只有两个难题:缓存失效和命名事物。”
菲尔·卡尔顿
是否有使缓存无效的通用解决方案或方法;知道条目何时过时,从而保证始终获得最新数据?
例如,考虑一个getData()
从文件中获取数据的函数。它根据文件的最后修改时间对其进行缓存,每次调用时都会对其进行检查。
然后添加第二个函数transformData()
来转换数据,并在下次调用该函数时缓存其结果。它不知道文件 - 你如何添加如果文件被更改,这个缓存变得无效的依赖关系?
您可以在getData()
每次调用时transformData()
调用并将其与用于构建缓存的值进行比较,但这最终可能会非常昂贵。
c - 基准测试时如何使缓存无效?
我有这段代码,当交换 UsingAs 和 UsingCast 的顺序时,它们的性能也会交换。
输出:
这样做的时候...
...结果:
做这个的时候...
...结果:
这样做时:
...结果:
除了独立运行它们之外,如何使缓存无效,以便第二个被基准测试的代码不会收到第一个代码的缓存内存?
抛开基准测试不谈,只是喜欢现代处理器执行这种缓存魔法的事实:-)
[编辑]
建议尝试这个更快的代码(据说)......
...结果是这样的:
比上面两个代码慢
[编辑]:
建议将每个例程交给他们自己的副本...
...输出:
现在他们得到了相同的结果,谢谢 Remus!
分别运行 Cast 和 As,它们也产生相同的结果(即 282)。现在,至于为什么当他们收到自己的数组副本时它们变得更快(从 322 到 282 毫秒),我无法从中做出任何事情:-) 这完全是另一回事
django - 在 Django 中使保存()上的 Memcached 键无效
我在 Django 中有一个视图,它使用 memcached 为依赖于相对静态数据集的流量更高的视图缓存数据。关键字是相对的:当数据库中发生更改时,我需要使特定 URL 数据的 memcached 键无效。为了尽可能清楚,这是视图的肉和土豆(Person 是一个模型,缓存是 django.core.cache.cache):
我想要做的是以“未格式化”形式获取那个 cache_key 变量,但我不知道该怎么做——如果它可以做到的话。
以防万一已经有事情要做,这就是我想要做的(这是来自 Person 模型的假设保存方法)
我正在考虑为这种类型的东西制作一个视图类,并在其中包含类似的功能,remove_cache
或者generate_cache
因为我经常做这种类型的东西。那会是一个更好的主意吗?如果是这样,如果它们在一个类中,我将如何调用 URLconf 中的视图?
php - Smarty 缓存文件失效
我想稍微深入一点 Smarty 缓存,所以我有一些简单的问题......
为了操纵缓存失效,我想知道 Smarty 将其缓存存储在哪个目录中。例如,与
user_id=123
我要存储在cache/users/123/
.cache
smarty缓存目录在哪里。如何告诉 smarty 存储与user_id=123
at相关的缓存cache/users/123/
?Smarty 是否也会在此目录中存储子模板的缓存?有没有关于清理这个目录中的缓存的建议?我认为,如果某些访问者当前正在访问此页面,则简单地从该目录中删除文件可能会导致一些错误(当 smarty 看到找到模板缓存时会发生错误,但由于它已经被删除,所以找不到子模板缓存,例如)。
任何建议和意见表示赞赏。
谢谢你。
performance - 添加新帖子时缓存的类别页面(page1,page2等)无效?
假设我们有 blog 的 category A
。类别A
目前在 100 页上有 1000 个帖子。所有页面都缓存在文件中(例如,由 Smarty 模板引擎缓存)。我正在添加帖子并希望它立即显示在第一页上。因此,我必须清除或使所有 100 个 A 类页面的缓存无效。
删除缓存页面不是一个好主意,因为我们可能有太多文件(例如,数千个页面)。我认为使缓存无效并根据请求重新生成页面是更有效的方法。
我唯一的想法是添加number of posts in category
到缓存ID。因此,首先我们应该获取类别中的帖子数量(例如,来自 memcache),然后检查缓存版本是否通过该数量有效。
一切看起来都很好而且很简单。但是让我们想象一下我添加新帖子然后在 1 分钟后删除另一个(旧)帖子的情况。帖子数量仍为 1000,并且某些类别页面将保持旧状态(如果在这 1 分钟内未查看它们)。
解决办法是什么?
PS:对不起我的英语,但我认为我的问题对于已经遇到过此类问题的人来说会很清楚。
谢谢
c++ - C++ 使用 `.reserve()` 填充 `std::vector` 以防止多线程缓存失效和错误共享
我有一个具有如下所示一般结构的程序。基本上,我有一个对象向量。每个对象都有成员向量,其中一个是包含更多向量的结构向量。通过多线程,对象被并行操作,进行涉及大量访问和修改成员向量元素的计算。一个对象一次只能被一个线程访问,并被复制到该线程的堆栈中进行处理。
问题是该程序无法扩展到 16 个内核。我怀疑并被告知问题可能是错误共享和/或缓存失效。如果这是真的,那么原因似乎一定是向量分配的内存彼此太近,因为据我了解,这两个问题(简单来说)都是由不同处理器同时访问的近端内存地址引起的。这种推理是否有意义,这可能会发生吗?如果是这样,我似乎可以通过使用 .reserve() 填充成员向量来增加额外的容量来解决这个问题,在向量数组之间留下大量的空内存空间。那么,这一切有意义吗?我完全出去吃午饭了吗?
jekyll - 基于 Jekyll Bootstrap 的博客 - 标题过期?
我有一个基于 Jekyll 引导的博客,托管在 Github 页面上。
我的问题是:每次我在网页上更改某些内容时,我都必须强制重新加载页面(CTRL + R)才能看到更改。
Jekyll 或我的浏览器似乎没有意识到有更新的版本可供发送。
如何配置 Jekyll 以更好地处理这个问题?
caching - 获取代表用户 CanCan 能力的字符串
我想缓存一个Post
视图,但该视图取决于当前用户的权限(例如,我只显示“编辑”链接 if current_user.can?(:edit, @post)
)
所以我希望我的缓存键包含当前用户的 CanCan 能力的表示,这样当用户的能力发生变化时我可以使缓存失效
SO:如何获得代表当前用户能力的字符串,以便具有相同能力的 2 个不同用户生成相同的“能力字符串”?
我试过user.ability.inspect
了,但这不会为具有相同能力的不同用户产生相同的字符串
caching - Doctrine 2 结果缓存失效
我在检索用户(消息应用程序)的新消息数量的查询中使用 Doctrine 2 的结果缓存:
我试图像这样使这个缓存无效(在我的实体存储库中):
这样我就不需要在我网站的每个页面上进行无用的查询。
我的问题:这是推荐的做法吗?我最终会遇到问题吗?