我真的很喜欢 PHP 的 APC 缓存模块的易于实现和功能。在我正在开发的网站中,我一直在使用它来缓存来自远程服务器的 json 响应(用于库存等)。但是,我现在正在执行许多不同的请求(数千个),我想缓存这些请求,并且我担心为此目的浪费内存。
我知道我可以编写一些 MYSQL 处理程序来将结果存储在数据库中,但似乎这将是我相当大的时间投资,特别是如果避免它的方法已经存在的话。
我讨厌成为理性的声音,但是这样的事情有什么问题(好吧,我意识到它过于简化了,应该检查以防文件在读取时仍在写入):
function get_json($id) {
$fn = './json-cache/' . $id . '.json';
if(file_exists($fn)) {
return file_get_contents($fn);
}
$json = do_something_to_get_json();
file_put_contents($fn, $json, LOCK_EX);
return $json;
}
这完全取决于您需要缓存多少请求以及为什么需要缓存它们。如果只是几个,通过 Memcached 之类的东西将它们缓存在内存中将非常简单(并且是临时的)。此外,您可以设置 memcached 使用的 RAM 量,以免内存不足。
如果您只是为了速度而进行缓存,那么将它们从驱动器中拉出来并不会比重新轮询 Web 服务快得多。
如果您正在为持久性进行缓存(如果您正在轮询的 Web 服务出现故障),那么您最好使用 MySQL 甚至 MongoDB 之类的东西。特别是使用 Mongo 会很好,因为您不需要模式,并且可以将 JSON 对象塞入一个集合中,然后再将它们拉出来。
为了回答我自己的问题,Pear:Cache-Lite可以解决问题。