缓存JSON数据


Caching JSON data

我以前从来没有真正缓存过数据,但我觉得这将极大地改善我的网站。

基本上,我从外部API中提取JSON数据,这有助于我网站的基本功能。这些信息并不经常改变,但我的用户每天从API中提取信息数千次。如果它每天更新一次,那就可以了。我想每天运行一个cron作业,它将提取信息并更新缓存。

我已经尝试了一些不同的东西,都使用PHP:

1)将数据存储在SQL表中
    我让它工作了,但是当我可以把它存储在基本的HTML/JSON中时,我没有理由每次都ping数据库。

2) .JSON文件(使用fwrite)
    我有它存储,但这工作的唯一方法是,如果.getJSON()回调函数被前置到JSON数据,然后数据被括号包围(使它JSON,我相信)。

有没有人有任何建议或任何方向来引导我?正如我所说,我从来没有真正做过这样的事情,所以我甚至不知道我是否在朝着正确的方向前进。

编辑:

好吧,所以我和我的主机谈过,因为我在共享主机(dreamhost)上,我不能安装memcached,这很糟糕。他们能给我的唯一信息是,如果它在http://pecl.php.net/上,那么我最有可能使用它。他们说APC可用。我不确定这是否符合我的问题。我想能够直接在jQuery中访问缓存。由于

您可以使用memcached。Memcached是一个内存中的键值存储,用于存储来自数据库调用、API调用或页面呈现结果的小块任意数据(字符串、对象)。非常容易实现,系统占用空间小。

由于您不能使用memcached,请返回到数据库选项并使用MEMORY引擎将其存储在表中

尝试memcached。你可以很容易地生成一个字符串键并存储任何你想要的json blob。像字典一样工作,除了在内存中保存。

有一个选项可以给它一个过期时间(否则它将永远被缓存)。因此,当用户请求数据时,只需检查它是否存储在memcached中。如果是,很好,退回去。如果它不是,那么尽您所能构建它,然后将它放在memcached中,并设置24小时过期。

如果您的数据因用户而异:

我通过在$_SESSION数组中存储一个对象来实现这一点。

我附加了一个快速的逻辑来确定数据有效期是否到了。如果是这样,它就绘制新的数据、服务和缓存。如果没有,它从$_SESSION中提取并提供。

试试Redis。为了方便地存储数据,而不会在设置/获取时出现意外错误,可以使用base64进行编码。

this to store:

file_put_contents($path, $json_text);

和这个来恢复:

$json_text = file_get_contents($path);
echo $json_text;

echo可以用来传递json,因为它来自http请求。如果你需要把它解析成一个变量(在javascript中),你可以使用array = JSON.parse('<?php echo $json_text; ?>');。如果您需要在php中解析,请使用$array = json_decode($json_text);