Questions tagged «caching»

缓存是一种用于在本地临时存储(缓存)数据以减少对远距离存储的数据的访问时间的机制。对于CPU /磁盘/ Web浏览,请使用相关标签(cpu-cache,diskcache等)

9
什么是缓存?
我不断听到有关y的性能问题x的信息,他们通过缓存解决了该问题。 或者,如何在程序代码中执行x,y,z会损害您的缓存能力。 即使在最新的播客之一中,杰夫·阿特伍德(Jeff Atwood)也谈到了它们如何缓存某些值以进行快速检索。 “缓存”和“缓存”这两个术语似乎有些含糊,这使我对在不同情况下的含义感到困惑。无论您是指应用程序缓存还是数据库缓存,CPU等,这意味着什么。 什么是缓存?有哪些不同的类型? 从上下文中,我可以了解一下,将经常检索到的值存储到主内存中并可以快速查找它。但是,什么是它 真的? 这个词似乎在许多不同的上下文中使用,其含义略有不同(cpu,数据库,应用程序等),我真的很想清除它。 在应用程序中的缓存工作方式与数据库缓存之间是否有区别? 当有人说他们发现一段会损害缓存的代码,并且在修复它后,它提高了应用程序的速度,他们在说什么? 程序的缓存是否是自动完成的?您如何允许将值缓存在程序中?我经常阅读该网站上的用户说他们在应用程序中缓存了一个值,我坐在这里想知道他们的意思。 另外,当有人谈论数据库缓存时,这实际上意味着什么?这仅仅是他们在数据库中打开的功能吗?您是否必须显式缓存值,还是数据库选择要缓存的值? 我如何开始自己缓存项目以提高性能? 您能举一些例子说明如何开始在应用程序中缓存值吗?还是再次说明,这是已经完成的事情了,我只需要以特定的方式编写代码以允许“缓存”即可? 那么数据库缓存又如何呢?我听说过像memcache之类的东西。在数据库中缓存是否需要这种实用程序? 我希望在应用程序缓存与数据库缓存,如何使用缓存以及在两种情况下如何实现实现之间实现良好的区分。
72 database  caching 

3
R中的缓存/备注/哈希选项
我试图找到一种简单的方法来在R中使用Perl的哈希函数(本质上是缓存),因为我打算同时进行Perl样式的哈希并编写自己的计算备忘录。但是,其他人却打败了我,并准备了备忘录。挖掘的越多,我发现的就越多,例如memoise和R.cache,但差异尚不明确。此外,除了使用该hash包之外,还不清楚如何获得Perl风格的哈希(或Python风格的字典)并编写自己的备忘录,这似乎并不能支撑这两个备忘录包。 由于我找不到有关CRAN或其他地方的信息来区分这些选项,因此这也许应该是关于SO的社区Wiki问题:R中用于记忆和缓存的选项是什么,它们之间有什么区别? 作为比较的基础,这是我找到的选项的列表。另外,在我看来,所有这些都依赖于哈希,因此我还要注意哈希选项。密钥/值存储在某种程度上是相关的,但是它打开了大量有关DB系统的蠕虫(例如BerkeleyDB,Redis,MemcacheDB以及许多其他蠕虫)。 看起来这些选项是: 散列 摘要-为任意R对象提供哈希。 记忆化 memoise-一个非常简单的功能记忆工具。 R.cache-提供更多用于记忆的功能,尽管似乎其中一些功能缺少示例。 快取 hash-提供类似于Perl的hash和Python字典的缓存功能。 键/值存储 这些是R对象的外部存储的基本选项。 藏匿者 文件哈希 检查点 缓存器-这似乎更类似于检查点。 CodeDepends-一个OmegaHat项目,可作为基础cacher并提供一些有用的功能。 DMTCP(不是R包)-似乎支持多种语言的检查点,并且开发人员最近寻求协助来测试R中的DMTCP检查点。 其他 Base R支持:命名向量和列表,数据框的行和列名称以及环境中的项目名称。在我看来,使用列表有点麻烦。(也有pairlist,但已弃用。) 所述data.table包支持在一个数据表元素的快速查找。 用例 尽管我对了解这些选项最感兴趣,但是我有两个基本用例: 缓存:简单的字符串计数。[注意:这不是用于NLP,而是用于一般用途,因此NLP库是过大的;表是不够的,因为我不想等到整个字符串集都加载到内存中后再进行操作。Perl样式的哈希值在实用程序中是正确的。] 记忆巨大的计算。 之所以会出现这些问题,是因为我正在研究一些简单的代码概要分析,并且我真的很想只计算简单的字符串,看看是否可以通过记忆来加快一些计算。即使我不做备忘录,也能够对输入值进行哈希处理,这会让我看看备忘录是否有帮助。 注意1:“可再生性研究的CRAN任务视图”列出了几个软件包(cacher和R.cache),但未详细说明用法选项。 注意2:为了帮助其他人查找相关代码,这里有一些作者或软件包的注意事项。有些作者使用SO。:) Dirk Eddelbuettel:digest-许多其他软件包都依赖于此。 罗杰·彭:cacher,filehash,stashR-以不同的方式,这些地址不同的问题; 有关更多软件包,请参见Roger的网站。 Christopher Brown:hash-似乎是一个有用的软件包,但不幸的是,与ODG的链接断开了。 亨里克·本格森(Henrik Bengtsson):R.cache&哈德利·威克姆(Hadley Wickham):memoise-目前尚不清楚何时偏爱另一种包装。 注意3:有些人使用备忘录/记忆,其他人使用备忘录/记忆。如果您在四处搜寻,请注意。Henrik使用“ z”,Hadley使用“ s”。


2
使用多个MemoryCache实例
我想使用System.Runtime.Caching名称空间向我的应用程序添加缓存功能,并且可能要在多个地方和不同的上下文中使用缓存。为此,我想使用几个MemoryCache实例。 但是,我在这里建议不要使用多个以上的MemoryCache实例: MemoryCache不是单例,但是您应该仅创建几个或可能仅创建一个MemoryCache实例,并且用于缓存项目的代码应使用这些实例。 多个MemoryCache实例将如何影响我的应用程序?我觉得这很奇怪,因为在我看来,在应用程序中使用多个缓存是很常见的情况。 编辑:更具体地说,我有一个应该为每个实例保留缓存的类。我应该避免使用MemoryCache并寻找其他缓存解决方案吗?MemoryCache在这种情况下使用是否被认为是不好的?如果是,为什么?

6
ASP.NET MVC如何禁用自动缓存选项?
如何从ASP.NET MVC应用程序禁用自动浏览器缓存? 因为我在缓存时遇到问题,因为它缓存了所有链接。但是有时它会自动重定向到DEFAULT INDEX PAGE,并存储它的缓存,然后每次我单击该链接时,它都会将我重定向到DEFAULT INDEX PAGE。 因此,有人知道如何从ASP.NET MVC 4中手动禁用缓存选项吗?

11
Firefox为什么没有显示正确的默认选择选项?
我正在制作一个用于管理产品SKUS的网络应用。其中一部分是将SKU与产品名称相关联。在表格的每一行上,我列出了一个SKU并显示一个<select>带有产品名称的框。当前与数据库中该SKU相关联的产品具有类似的属性selected="selected"。可以通过AJAX进行更改和更新。 有很多产品<option>s-确切地说是103-并且此列表<select>在每一行中重复。 从页面上的另一输入中,我正在使用jQuery AJAX请求添加新的SKU /产品关联,并且为了清楚地表明它们是立即添加的,我将它们插入到表格的顶部,并带有一点高亮效果。随着SKU的数量增加到10左右,如果刷新页面(将所有内容从按产品名称排序的数据库加载回数据库),则Firefox将开始显示默认选择的错误选项。它显示哪个错误选项并不一致,但是似乎混淆了页面重新加载之前存在的选项。 如果我检查<select>使用的Firebug,select="selected"则在正确的<option>标签上。刷新页面(或离开页面并输入该页面的URL以返回)并不能正确显示,但是硬刷新(Ctrl + F5)可以。 Chrome和IE7都首先正确显示此内容。 我的理论是,这是Firefox错误的缓存策略的结果。听起来对吗?我有什么办法可以在代码中说“如果刷新此页面,请对其进行硬刷新-从头开始重新加载所有内容?” 更新资料 为了解决这个问题,我改变了策略。 之前,我在每个表格行中都放置了一个<select>带有<option>s的长列表,并将当前值设置为默认值 现在,我将当前值放在中<span>。如果用户单击“更改”按钮,则将替换<span>为<select>,然后“更改”按钮变为“确认”按钮。如果他们更改选项并单击“确认”,则AJAX将更新数据库,然后使用新值<select>返回到a <span>。 这有两个好处: 它修复了上述错误 它需要远在页面上较少的DOM元素(所有这些多余<option>S)

5
Java中简单易用的LRU缓存
我知道实现起来很简单,但是我想重用已经存在的东西。 我要解决的问题是我为不同的页面,角色加载了配置(从XML,所以我想缓存它们),因此输入的组合可以增长很多(但99%的增长)。为了处理这个1%,我想在缓存中设置一些最大项目... 直到我在apache commons中找到了org.apache.commons.collections.map.LRUMap,它看起来还不错,但还想检查一下其他内容。有什么建议吗?
69 java  caching  lru 

3
如何告诉Spring缓存不要在@Cacheable批注中缓存空值
有没有一种方法可以指定如果该方法返回null值,那么不要将结果缓存在@Cacheable注解中,例如这样的方法? @Cacheable(value="defaultCache", key="#pk") public Person findPerson(int pk) { return getSession.getPerson(pk); } 更新:这是去年11月提交的有关缓存空值的JIRA问题,该问题尚未解决: [#SPR-8871] @Cachable条件应允许引用返回值-Spring Projects Issue Tracker

3
Rails.cache.clear某些键名?
是否有可能以某种方式运行Rails.cache.clear并且仅清除具有特定名称/字符串的键? 我不想清除整个缓存...只是用钥匙串blog/post的名称(即blog/post/1,blog/post/2)。 我正在使用带有memcached的dalli作为我的缓存并运行Rails 3.0.6。

4
Java的WeakHashMap和缓存:为什么引用键而不是值?
Java的WeakHashMap通常被认为对缓存有用。尽管其弱引用是根据地图的键而不是其值定义的,但这似乎很奇怪。我的意思是,这是我要缓存的值,而一旦缓存中没有其他人强烈引用它们,我想获取垃圾回收值,不是吗? 以哪种方式保留对键的弱引用?如果执行a ExpensiveObject o = weakHashMap.get("some_key"),那么我希望高速缓存保持在'o'状态,直到调用者不再拥有强引用为止,并且我根本不在乎字符串对象“ some_key”。 我想念什么吗?

7
在Django中对抗客户端缓存
我正在使用render_to_response快捷方式,并且不想制作特定的Response对象来添加其他标头,以防止客户端缓存。 我想要一个包含以下内容的回复: 语法:无缓存 缓存控制:无缓存 缓存控制:必须重新验证 浏览器希望将所有其他巧妙的方式解释为指令以避免缓存。 是否有没有缓存的中间件或类似的东西可以以最少的代码入侵来解决问题?
69 django  caching 

8
缓存与会话的优势
在会话和缓存中存储数据表有什么区别?优点和缺点是什么? 因此,如果它是一个简单的搜索页面,它会在数据表中返回结果并将其绑定到gridview。如果用户'a'搜索和用户'b'搜索,最好将其存储在Session中,因为每个用户很可能会有不同的结果,或者我是否仍可以将他们的每个搜索存储在Cache中,或者没有意义,因为存在只有一个缓存。我想基本上我想说的是缓存将被覆盖。

7
file_get_contents得到错误的结果
更新资料 我解决了问题并发布了答案。但是,我的解决方案并非100%理想。我宁愿只symlink从cachewith clearstatcache(true, $target)或中删除clearstatcache(true, $link)但那不起作用。 我还宁愿首先避免对符号链接进行缓存,也可以在生成符号链接后立即将其从缓存中删除。不幸的是,我没有运气。由于某些原因clearstatcache(true),创建符号链接后无法正常工作,但仍会对其进行缓存。 我会很高兴地将悬赏奖励给任何能够改善我的答案并解决这些问题的人。 编辑 我试图通过每次clearstatcache运行时生成一个文件来优化我的代码,因此我只需要为每个符号链接清除一次缓存。由于某些原因,这不起作用。clearstatcache每次symlink在路径中包含a时都需要调用它,但是为什么呢?必须有一种方法可以优化我拥有的解决方案。 我使用PHP 7.3.5带nginx/1.16.0。有时file_get_contents在使用时会返回错误的值symlink。问题是删除并重新创建符号链接后,其旧值保留在缓存中。有时返回正确的值,有时返回旧值。它似乎是随机的。 我试图用以下方法清除缓存或防止缓存: function symlink1($target, $link) { realpath_cache_size(0); symlink($target, $link); //clearstatcache(true); } 我并不是真的想要禁用缓存,但是我仍然需要100%的file_get_contents精度。 编辑 我无法发布我的源代码,因为它太长和太复杂了,所以我创建了一个最小的,可重现的示例(index.php),该示例再次出现了问题: <h1>Symlink Problem</h1> <?php $dir = getcwd(); if (isset($_POST['clear-all'])) { $nos = array_values(array_diff(scandir($dir.'/nos'), array('..', '.'))); foreach ($nos as $no) { unlink($dir.'/nos/'.$no.'/id.txt'); rmdir($dir.'/nos/'.$no); } foreach (array_values(array_diff(scandir($dir.'/ids'), array('..', '.'))) …

2
在程序员一级使用C ++ std :: atomic可以保证什么?
我已经听过并阅读了有关的几篇文章,演讲和stackoverflow问题std::atomic,并且我想确保自己已经很好地理解了。由于MESI(或派生的)高速缓存一致性协议,存储缓冲区,使队列无效等可能存在延迟,因此我仍然对高速缓存行的可见性感到困惑。 我读到x86具有更强的内存模型,并且如果缓存失效被延迟,x86可以还原启动的操作。但是我现在只对我作为独立于平台的C ++程序员应该承担的兴趣感兴趣。 [T1:线程1 T2:线程2 V1:共享原子变量] 我了解std :: atomic可以保证, (1)在变量上不发生数据争用(由于对缓存行的独占访问)。 (2)取决于我们使用哪种memory_order,它(在有障碍的情况下)保证发生顺序一致性(在障碍之前,之后或之后)。 (3)在T1上执行原子write(V1)之后,T2上的原子RMW(V1)将是连贯的(其缓存行将已用T1上的写入值进行更新)。 但是正如缓存一致性入门所述, 所有这些事情的含义是,默认情况下,加载可以获取过时的数据(如果相应的失效请求位于失效队列中) 那么,以下正确吗? (4)std::atomic不保证T2在T1上执行原子write(V)之后不会读取原子read(V)上的“陈旧”值。 问题(4)是否正确:如果无论延迟如何,在T1上进行原子写入都会使高速缓存行无效,那么当原子RMW操作而不是在原子读取上进行操作时,T2为什么要等待无效生效? 问题(4)是否错误:线程何时可以在执行过程中读取“过时”值并且“可见”? 非常感谢您的回答 更新1 所以看来我在(3)上错了。想象以下交织,初始V1 = 0: T1: W(1) T2: R(0) M(++) W(1) 即使在这种情况下,保证T2的RMW完全在W(1)之后发生,它仍然可以读取“过时的”值(我错了)。据此,atomic不能保证完全的缓存一致性,而只能保证顺序一致性。 更新2 (5)现在想象这个例子(x = y = 0并且是原子的): T1: x = 1; T2: y = 1; T3: if (x==1 && y==0) print("msg"); …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.