我正在使用codeigniter (MVC)和extjs来申请。 该应用程序包含许多带有用户相关数据的extjs网格。我希望将服务器json响应缓存到特定时间。
我有一个想法实现如下
if(cache file exists and not expired)
{
$data = read_file(cache file path);// the cache file contains json encoded data with .json extention
}
else
{
$result = call to a model function; // returns data from a mysql query
$data = json_encode( $result );
//creating cache file with retrived data
wite_file(cache file path, $data)
}
echo $data; // $data is in json format
我想以这种方式实现缓存。这是正确的方法吗? 总的来说,我想实现一个自定义的json缓存库,用于缓存extjs网格的服务器json数据
是否有任何json缓存库已经可用于codeigniter。 请帮助您提出建议
答案 0 :(得分:0)
是的,这听起来不错,要知道文件是否已过期,您可以在文件系统上使用创建时间戳。
stat
函数应该为您提供足够的有关文件的信息,以便在需要时使它们过期。
Codeigniter似乎有一些caching mechanism,遗憾的是它似乎只适用于网页,如果您使用视图呈现JSON,您可能可以使用它。
答案 1 :(得分:0)
Codeigniter几乎完全符合您所描述的内容。他们将其称为缓存驱动程序:http://codeigniter.com/user_guide/libraries/caching.html
在您的情况下,您可能希望像这样启动它:
$this->load->driver('cache', array('adapter' => 'file', 'backup' => 'file'));
if ( ! $foo = $this->cache->get('foo'))
{
echo 'Saving to the cache!<br />';
$foo = 'foobarbaz!';
// Save into the cache for 5 minutes
$this->cache->save('foo', $foo, 300);
}
echo json_encode($foo);
它会将缓存数据写入文件。
您的情况下的缺点是CI序列化缓存文件中的数据而不是使用JSON。我想你可以使用json_encode()而不是serialize()来覆盖驱动程序。上面的方法会浪费一点资源,因为它既是序列化又是在输出上使用json编码。