Questions tagged «caching»

有关应用程序的缓存算法以及数据库引擎以及其他信息存储和表示应用程序的信息缓存的实现的问题。

13
那么Singletons不好,那又如何呢?
最近,关于使用(和过度使用)Singleton的问题进行了很多讨论。我也是我职业生涯早期的那些人之一。我可以看到问题出在哪里,但是,在许多情况下,我看不到一个很好的选择-而且,很少有反辛格尔顿的讨论真正提供过这样的讨论。 这是我参与的一个近期重大项目的真实示例: 该应用程序是一个胖客户端,具有许多单独的屏幕和组件,它们使用来自服务器状态的大量数据,这些数据并不经常更新。该数据基本上被缓存在Singleton“管理器”对象中-可怕的“全局状态”。想法是在应用程序中拥有一个位置来保存和同步数据,然后打开的任何新屏幕都可以从那里查询它们的大部分需求,而无需从服务器重复请求各种支持数据。不断地向服务器请求会占用太多带宽-我说的是每周要多付数千美元的互联网账单,所以这是不能接受的。 除了基本具有这种全局数据管理器缓存对象之外,还有其他合适的方法吗?当然,此对象不一定要正式是“ Singleton”,但从概念上讲,成为一个对象确实有意义。这里有什么不错的清洁选择?

6
为什么CPU缓存如此之快?
是什么使CPU高速缓存内存比主内存快得多?我可以看到分层缓存系统有一些好处。较小的缓存可以更快地进行搜索是有意义的。但是必须有更多的东西。
58 memory  caching 

3
在业务层缓存与在数据层缓存
我一直在使用DAL进行缓存的项目中工作,基本上只是在您要对数据库进行调用时,它会检查缓存中是否已经有数据,如果存在,它不会进行调用,并且而是返回该数据。 我最近才读到有关在业务层进行缓存的信息,因此基本上可以缓存整个业务对象。我可以立即看到的一个优势是响应时间更快。 您什么时候比另一个更喜欢?并且在业务层缓存是一种常见的做法吗?

9
质量检查人员如何测试他们看不到的缓存逻辑?
我刚刚在Web应用程序中实现了一个缓存层,现在我想知道QA应该如何测试它,因为缓存对用户是透明的。 我的一个想法是将登录记录在调用填充缓存的代码的方法中,并记录何时从缓存中提取对象以及何时需要从数据库中重新创建对象,然后测试人员可以查看日志以查看是否,例如,每隔10分钟就会从数据库中重新加载某个对象,而不是每一次页面浏览。 但是有人可以针对这种情况提出一些更好的做法吗?
33 testing  caching 

2
编写低延迟的Java
是否存在用Java编写低延迟代码的特定于Java的技术(不适用于C ++的技术)?我经常看到Java低延迟角色,并且他们要求获得编写低延迟Java的经验-有时似乎有点矛盾。 我唯一能想到的就是JNI的经验,将I / O调用外包给本地代码。也可能使用破坏者模式,但这不是实际技术。 有编写低延迟代码的Java特定技巧吗? 我知道有一个实时Java规范,但是我被警告实时与低延迟不一样。

3
在单页面应用程序中处理浏览器缓存
我试图弄清楚如何正确处理单页应用程序的Web浏览器缓存。 我有一个非常典型的设计:实现SPA的几个HTML,JS和CSS文件,以及SPA消耗的一堆JSON数据。当我要推送更新时会出现问题:我同时更新了网站的静态部分和同时生成JSON的代码,但是客户端浏览器通常缓存了静态部分,因此旧代码尝试处理新数据并可能(取决于所做的更改)遇到问题。(特别是,在使用缓存的JS而无需重新验证的情况下,IE似乎比Chrome或Firefox更具攻击性。) 处理此问题的最佳方法是什么? 确保我的JSON更改向后兼容,并假定浏览器缓存将在合理的时间范围内到期。 在静态JS和JSON中都嵌入某种版本号,然后window.location.reload(true);在它们不匹配时执行。 找出标题的适当组合(must-revalidate或no-cache其他方式;有关执行此操作的方法,来源 会有所不同),以确保浏览器始终在每次加载时重新验证所有资源,即使这意味着要进行几次额外的往返加载网站。 微管理我的缓存控件并使标头过期,以便在我要推送更新时静态内容过期。 还有吗

6
大量使用缓存的单元测试方法的最佳做法?
我有许多业务逻辑方法,用于存储和检索(通过过滤)对象以及来自缓存的对象列表。 考虑 IList<TObject> AllFromCache() { ... } TObject FetchById(guid id) { ... } IList<TObject> FilterByPropertry(int property) { ... } Fetch..并Filter..会调用AllFromCache它来填充缓存,如果不存在则返回,如果存在则从其返回。 我通常回避对这些单元进行测试。针对此类结构进行单元测试的最佳实践是什么? 我考虑过在TestInitialize上填充缓存,并在TestCleanup上删除缓存,但这对我来说并不对,(很可能)。

1
为什么有些网站在Chrome开发者工具中显示0字节
我正在为我的网站进行页面速度优化,并研究其他网站如何做到这一点。我注意到,某些网站(例如Facebook或Ringgitplus)在Chrome开发人员工具的“网络”标签中显示了某些资源的0字节,而实际内容的大小为几千字节。 我读了一些文章,说大小是要获取的数量,内容是响应的实际大小。因此,当大小为0字节时,表示它是从缓存中提供的。但是,当我使用隐身模式打开页面或清除所有缓存时,也会发生同样的事情。 这怎么可能?如何为我的网站实现相同的目标?
14 http  caching  chrome 

2
共享缓存-无效的最佳做法
我想知道什么是使缓存对象无效/更新的更好方法。 先决条件 具有远程Memcached服务器(用作多个应用程序的缓存) 所有服务器均由azure托管(关联区域,相同的数据中心) 缓存对象的大小范围从200字节到50 KB 方法1(尽快存储在缓存中) 创建对象A->存储在数据库中并存储在缓存中 客户端请求的对象A->检查缓存是否存在,否则从数据库中获取并存储在缓存中 对象A更新->存储在数据库中,存储在缓存中 方法1似乎更简单。如果创建了某些内容,请尽快放入缓存。不管有人会需要它。 方法2(惰性缓存存储) 创建对象A->存储在数据库中 客户端请求的对象A->检查缓存是否存在,否则从数据库中获取并存储在缓存中 对象A更新->存储在数据库中,删除键在缓存中 方法2似乎更了解内存。在这种方法中,只有请求的项目才进入缓存。 问题1:考虑到性能,哪种方法更好?内存和CPU都不算在内。 问题2:我的想法是过早的优化吗? 问题3:还有其他想法吗?其他方法?

2
使用Memcached:在更新数据库时更新缓存是一种好习惯吗?
这个问题是关于架构的最佳实践。 我们目前的架构 我有一个PHP类,可访问MySQL获取用户信息。叫它User。 User可以多次访问,因此我们实现了缓存层以减少负载。 第一层是我们所谓的“每个请求”缓存。从MySQL检索数据后,我们将数据存储在的私有属性中User。任何后续的数据请求都返回该属性,而不是从MySQL重新请求数据。 由于Web请求是根据每个请求生存和终止的,因此此缓存仅阻止应用程序在单个请求中多次访问MySQL。 我们的第二层是Memcached。当私有属性为空时,我们首先检查Memcached中的数据。如果Memcached为空,我们向MySQL查询数据,更新Memcached,然后更新的private属性User。 问题 我们的应用程序是一个游戏,有时必须使某些数据尽可能最新。在大约五分钟的时间内,对用户数据的读取请求可能会发生10到11次;那么可能会发生更新。随后的读取请求必须是最新的,否则游戏机制将失败。 因此,我们要做的是实现在数据库更新发生时执行的一段代码。此代码使用更新的数据在Memcached中设置密钥,因此所有后续对Memcached的请求都是最新的。 这是最优的吗?在尝试维护此类“活动缓存”时,是否应注意性能问题或其他“陷阱”?

4
优化CPU缓存(在C中)时重要的是什么?
阅读这两个问题,我发现了解CPU缓存行为在处理内存中的大量数据时可能很重要。我想了解缓存的工作方式,以便将其他工具添加到优化工具箱中。 关于CPU缓存工作方式的核心点是什么,以便我可以编写明智地使用它的代码?相关地,是否有一种方法可以对代码进行概要分析,以查看缓存使用不当是否会减慢速度?


2
随机缓存过期
我一直在尝试使用随机缓存的到期时间,以避免单个请求强制一次更新多个事件的情况。例如,一个网页可能包含五个不同的组件。如果每个都设置为在30分钟内超时,则用户每30分钟将有很长的等待时间。因此,您可以将它们全部设置为15到45分钟之间的随机时间,以使得对于给定的页面加载,最多只有一个组件可以重新加载。 我正在尝试找到有关此主题的任何研究或指南,例如最佳方差参数。我确实记得看到过一篇有关Google(?)如何使用这种技术的文章,但是找不到它,而且关于该主题的文章似乎也很少。

5
如何避免在管理缓存的类中违反SRP?
注意:代码示例是用c#编写的,但这无关紧要。我将c#用作标签,因为找不到更合适的标签。这是关于代码结构的。 我正在阅读Clean Code,并试图成为一个更好的程序员。 我经常发现自己难以遵循“单一责任原则”(类和功能只能做一件事),尤其是在功能方面。也许我的问题是“一件事”的定义不明确,但仍然... 一个例子:我在数据库中有一个Fluffies列表。我们不在乎什么是蓬松。我想上课恢复蓬松。但是,蓬松可以根据某些逻辑进行更改。根据某些逻辑,此类将从缓存中返回数据或从数据库中获取最新数据。我们可以说它管理蓬松,这是一回事。为了简单起见,假设加载的数据可以使用一个小时,然后必须重新加载。 class FluffiesManager { private Fluffies m_Cache; private DateTime m_NextReload = DateTime.MinValue; // ... public Fluffies GetFluffies() { if (NeedsReload()) LoadFluffies(); return m_Cache; } private NeedsReload() { return (m_NextReload < DateTime.Now); } private void LoadFluffies() { GetFluffiesFromDb(); UpdateNextLoad(); } private void UpdateNextLoad() { m_NextReload = DatTime.Now …

5
最高效的缓存替换算法
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 6年前关闭。 维基百科列出了11种缓存替换算法。假设我对我将要开发的应用程序几乎一无所知,那么应该使用什么作为“默认”缓存替换算法? 如果我从操作系统课程中正确回忆起,LRU是最好的通用缓存替换算法。但也许我弄错了。 另外,这是一个学术问题,因为通常来说,主内存便宜又丰富,我真的不需要担心缓存大小。

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.