标签: cache-invalidation

缓存失效 - 是否有通用解决方案?

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

菲尔卡尔顿

是否存在使缓存无效的通用解决方案或方法; 要知道某个条目何时过时,所以您可以保证始终获得最新数据?

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

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

algorithm caching cache-invalidation generalization

117
推荐指数
3
解决办法
4万
查看次数

Jekyll Bootstrap基于博客 - Expire标题?

我在Github页面上有一个基于Jekyll引导程序的博客.

我的问题是:每次我在网页上更改内容时,都必须强行重新加载页面(CTRL + R)以查看更改.

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

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

http-caching jekyll cache-invalidation github-pages

30
推荐指数
2
解决办法
2748
查看次数

如何使用Flask-Restful Flask-Cache

如何在Flask-Restful中使用Flask-Cache @ cache.cached()装饰器?例如,我有一个继承自Resource的Foo类,而Foo有get,post,put和delete方法.

如何在一个POST?之后使缓存的结果无效?

@api.resource('/whatever')
class Foo(Resource):
    @cache.cached(timeout=10)
    def get(self):
        return expensive_db_operation()

    def post(self):
        update_db_here()

        ## How do I invalidate the value cached in get()?
        return something_useful()
Run Code Online (Sandbox Code Playgroud)

python redis cache-invalidation flask-cache flask-restful

17
推荐指数
1
解决办法
5462
查看次数

清除 CORS 的浏览器缓存

我需要清除 Chrome 中一个文件的缓存。

\n

我正在设置从我自己的 CDN 加载字体,并添加cache-control: public, max-age=31536000, immutable标题。但是,我没有正确设置 CORS,因此出现 CORS 错误。现在,CORS 错误已修复,但由于缓存控制标头,Chrome 仍在服务旧请求。

\n

注意:我只需要清除一次缓存。我希望字体将来是不可变的。

\n

我尝试过的事情

\n
    \n
  • 从设置中清除最近的浏览器缓存
  • \n
  • 在 Devtools > 网络中,选择“禁用缓存”
  • \n
  • 在 Devtools > 网络中,右键单击网络请求并选择“从缓存中清除”
  • \n
  • 使用 \xe2\x8c\x98\xe2\x87\xa7R 硬重新加载(在 Mac 上)
  • \n
  • 长按左上角的刷新按钮,选择“清空缓存并硬重新加载”(/sf/answers/490062961/
  • \n
\n

我可以确认 CORS 错误有两个原因:

\n
    \n
  • 现在可以在 Safari 中使用(之前不能使用)
  • \n
  • 运行curl -IL -X\'GET\' -H\'Origin: http://localhost:3000\' https:example.com/file返回正确的 CORS 标头
  • \n
\n

相关文章

\n

caching google-chrome browser-cache cache-invalidation google-chrome-devtools

16
推荐指数
0
解决办法
5369
查看次数

错误:原因:无效的流标题:android studio 2.3.1中的000900D9

我正在使用android studio 2.3.1并且它昨天工作正常但现在它给我一个错误错误:原因:无效的流标题:000900D9 此消息从Messages Gradle Sync对话框中抛出.

以下是我为解决这个问题所采取的步骤,但对我来说没有任何作用

1.使缓存无效并重新启动

  1. C:\ Users\suraj.gradle\caches\3.3中删除脚本和脚本重新映射的文件

并检查了stackoverflow中的许多帖子,但对我来说没有任何作用,这里提出的大多数问题都没有得到任何人的回答.

在我的项目结构下

编译Sdk版本:Api 25

构建工具版本:25.0.2

android cache-invalidation android-studio

14
推荐指数
3
解决办法
6975
查看次数

获取表示用户CanCan能力的字符串

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

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

那么:我怎样才能得到一个表示当前用户能力的字符串,以便2个具有相同能力的不同用户生成相同的"能力字符串"?

我已经尝试过user.ability.inspect,但是对于具有相同能力的不同用户,这不会产生相同的字符串

caching authorization cache-invalidation cancan

9
推荐指数
2
解决办法
2299
查看次数

为什么CLFLUSH存在于x86中?

我最近了解了排锤攻击.为了执行此攻击,程序员需要为特定数量的地址刷新CPU的完整缓存层次结构.

我的问题是:为什么在x86中需要CLFLUSH?如果所有L*缓存都是透明的(即,不需要显式缓存失效),那么使用此指令的原因是什么?除此之外:CPU是否可以自由地推测内存访问模式,从而完全忽略该指令?

x86 assembly caching cpu-architecture cache-invalidation

8
推荐指数
1
解决办法
1134
查看次数

Doctrine 2导致缓存失效

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

$query->useResultCache(true, 500, 'messaging.nb_new_messages.'.$userId);
Run Code Online (Sandbox Code Playgroud)

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

public function clearNbNewMessagesOfUserCache($userId) {
    $cacheDriver = $this->getEntityManager()->getConfiguration()->getResultCacheImpl();
    $result  = $cacheDriver->delete('skepin_messaging.nbNewMessages.'.$userId);

    if (!$result) {
        return false;
    }

    return $cacheDriver->flushAll();
}
Run Code Online (Sandbox Code Playgroud)

因此,我不需要在我的网站的每个页面上进行无用的查询.

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

caching apc cache-invalidation doctrine-orm

7
推荐指数
1
解决办法
2334
查看次数

强制浏览器在Angular环境中清除缓存

有一个流行的问题是如何在VanillaJS应用程序中强制清除浏览器的缓存,一般的共识是,将.js脚本的名称或脚本参数设置为新值:强制浏览器清除缓存

我如何使用Angular实现这一点(目前在AngularCLI/Webpack构建中为5.1),因此每次我在生产中发布代码(使用AOT)时,都会构建一个新版本?我会使用日期散列而不是索引,但主要问题是:我在哪里可以设置它(例如脚本名称/参数)?在开发中,CLI负责重建应用程序,这不是问题,只是在生产中!

javascript caching cache-invalidation angular

7
推荐指数
1
解决办法
1万
查看次数

如何广播缓存使消息无效到运行Web应用程序的所有服务器?

我在AWS上托管了一个基于Java的Web应用程序.它被读取 - 大多数情况下,缓存从数据库中检索的对象以获得性能是很有意义的.

当我更新一个对象时,我希望能够向所有服务器广播该对象的保存,并且它应该从所有本地缓存​​中失效.

不需要是实时的.过时的物体很烦人,需要在大约20秒内冲洗.用户注意他们是否坚持了几分钟.缓存失效不必发生在保存对象的毫秒之后.


我一直在想什么

  • 我像jGroups一样研究广播技术,但AWS不支持jGroups.
  • 我不认为亚马逊的SQS消息服务可以被制作成广播服务.
  • 我正在考虑将数据库用于此目的:我将事件写入数据库表,并让每个服务器每隔几秒轮询一次该表以获取新的列表项.

java load-balancing amazon-web-services cache-invalidation

6
推荐指数
1
解决办法
963
查看次数