2011-12-26 12 views
0

私はcodeigniter (MVC)extjsをアプリケーションに使用しています。 アプリケーションには、ユーザー関連のデータを含む多くのextjsグリッドが含まれています。私は特定の時間までサーバーjsonの応答をキャッシュしたい。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 

私はこの方法をキャッシュ実装するには、次のようにこれを実装するためのアイデアを得ました。それは正しい方法ですか? 完全に私はextjsグリッド用のサーバーjsonデータをキャッシュするためのカスタムjsonキャッシングライブラリを実装したい

すでにcodeigniterに利用可能なjsonキャッシングライブラリはありますか? あなたの提案を助けてください

答えて

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); 

それは書きますキャッシュするデータをファイルに保存します。

JSONを使用するのとは対照的に、CIがキャッシュファイル内のデータをシリアル化するということがあります。 serialize()の代わりにjson_encode()を使ってドライバをオーバーライドできると思います。上記のメソッドは、シリアライズされ、出力でjsonエンコーディングを使用するという点で、少しのリソースを無駄にします。

+0

ありがとうございますphirschybar。私はcodeigniterキャッシュライブラリを見て、それはシリアル化を使用してキャッシュファイルへの応答データを書き込み、キャッシュファイルからデータを読み出すためにシリアル化を解除します。私はjson_encodeでserializeを置き換えようとしましたが、そのエラー[json](php_json_encode)の型はサポートされず、nullとしてエンコードされています。私はjson_encode()は、mysqlの結果オブジェクトをエンコードできないと思う。私はここで騒がしかった。何か提案してください? – nani1216

+0

あなたはどのバージョンのPHPを実行していますか? – phirschybar

+0

私はPHP 5.3.1を実行しています – nani1216

0

はい、ファイルが期限切れになっているかどうかを知るために、ファイルシステム上で作成タイムスタンプを使用することができます。

関数は、必要に応じてファイルを期限切れにするための十分な情報をファイルに与える必要があります。

Codeigniterは悲しいことに悲しいことに、あなたがJSONをレンダリングするためにビューを使用している場合、悲しいことに、それを使用することができるかもしれません。

+0

RageZさんへの返信ありがとうございます。私はphilsturgeonキャッシュライブラリをカスタマイズする代わりに自分自身を実装したい。 – nani1216

関連する問題