缓存设计和Memcache(d)记录超时?

时间:2012-05-24 09:42:48

标签: php caching memcached

我为每个API调用都有一个非常广泛的缓存系统。从每个命令和请求参数以及特定超时创建唯一指纹。

当发出请求并且它没有分配可接受的缓存时间戳时,则在没有返回缓存的情况下发出请求,因此程序会自行完成所有操作。其结果存储在具有新时间戳的缓存中。

如果发出请求并且请求定义它愿意接受5分钟缓存 - 并且系统发现这样 - 那么系统将从缓存中返回结果。

这意味着我的每个缓存记录都包含一个密钥(唯一指纹),结果和时间戳。

目前缓存存储在文件系统中,时间戳是文件修改时间,这会导致i / o请求在更高负载下成为杀手。

阅读了多篇文章后,我意识到建议使用Memcache和Memcached来减少这些调用。

但Memcache和Memcached只存储指纹和值。没有时间戳,从技术上讲,这意味着我将失去按需缓存时间戳接受度和灵活性。我在技术上必须开始为每个缓存存储两条记录:

指纹数据和数据 指纹时间和时间戳

..看起来很脏。还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

如果您在创建时知道缓存的objets应该在缓存中持续多长时间,那么Memcached就具有您需要的功能。 Memcache::set函数有一个名为$expire的参数,您可以在其中设置缓存对象的生存期(以秒为单位)。

如果您只知道从缓存中检索对象时的生命周期,则无效。 我同意每个缓存实体使用两个密钥是不可行的,因为缓存可能会丢失其中一个而保留另一个。 一个(仍然“脏”,但更好)的解决方案可能是存储您放入缓存中的每个对象的时间戳。您可以通过不直接缓存对象来实现此目的,而是包含时间戳和对象的数组。