我以前从来没有真正缓存过数据,但我觉得这将极大地改善我的网站。
基本上,我从外部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);
。