0

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

当发出请求并且它没有分配可接受的缓存时间戳时,则发出请求而没有返回缓存,因此程序会自行处理所有内容。其结果以新的时间戳存储在缓存中。

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

这意味着我的每条缓存记录都包含一个键(唯一指纹)、结果和创建时间的时间戳。

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

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

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

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

..这似乎很脏。有没有其他选择?

4

1 回答 1

1

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

如果您只知道从缓存中检索对象时的生命周期,那么这将不起作用。我同意每个缓存实体使用两个键是不可行的,因为缓存可能会丢失两者中的一个而保留另一个。一个(仍然“脏”,但更好)的解决方案可能是为您放入缓存中的每个对象存储一个时间戳。您可以不直接缓存对象,而是使用包含时间戳和对象的数组来做到这一点。

于 2012-05-24T09:57:42.067 回答