用于extjs网格的json数据缓存

时间:2011-12-26 12:11:56

标签: json codeigniter caching extjs

我正在使用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。 请帮助您提出建议

2 个答案:

答案 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编码。