Questions tagged «memcached»

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的请求都是最新的。 这是最优的吗?在尝试维护此类“活动缓存”时,是否应注意性能问题或其他“陷阱”?

2
基于密钥的缓存如何工作?
我最近在37Signals博客上阅读了一篇文章,但我不知道他们如何获取缓存密钥。 具有包含对象时间戳记的缓存键是一件好事(这意味着更新对象时,缓存将失效);但是如何在模板中使用高速缓存键而又不会导致您试图从高速缓存中获取的对象受到数据库命中。 具体来说,这如何影响一对多关系(例如,您在其中呈现帖子的评论)。 Django中的示例: {% for comment in post.comments.all %} {% cache comment.pk comment.modified %} <p>{{ post.body }}</p> {% endcache %} {% endfor %} 例如,在Rails中缓存与仅对memcached的请求不同(我知道它们将您的缓存键转换为其他内容)。他们还缓存缓存密钥吗?
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.