cache liteで配列をキャッシュする

notoです。

先日YAMLファイルを設定ファイルとし、PHPでロードするエントリーを書きましたが、設定情報を取得するのにいちいちYAMLファイルをロードするのは非効率です。

そこでPEARにCache_Liteというライブラリがあるので、そちらを使ってYAMLファイルをキャッシュしようと思います。

Cache_Liteのインストールは、pearコマンドでインストールします。

1
$ pear install Cache_Lite

YAMLをロードすると、連想配列、または配列で返却されます。 Cache_Liteは、デフォルトでは配列をキャッシュすることはできないのでインスタンス生成時のオプションで「automaticSerialization」をtrueに指定してあげることで、自動的に配列をシリアライズ化してキャッシュに保存してくれます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
require_once 'Cache/Lite.php';
require_once 'spyc.php';

class cache{

     /**
     * Cache_Lite::option
     */
    private $cacheOption = array(
        'automaticSerialization' => 'true', //配列をキャッシュしたい場合は、記載すること。
        'cacheDir' => '/tmp/cache',
        'lifeTime' => 10800
    );

    /**
     * Cache_Liteインスタンス格納用
     */
    private $cache;


    /**
     * コンストラクタ
     */
    public function __construct($option = array()){
        $option = array_merge($this->cacheOption, $option);
        $this->cache = new Cache_Lite($option);
    }


    /**
     * キャッシュの読み込み
     * キャッシュが存在しない場合はキャッシュを生成する。
     */
    public function read($name){
        if(!$data = $this->cacheLite->get('cache')){
            $data = Spyc::YAMLLoad('list.yml');
            $this->cacheLite->save($data, 'cache');
        }
        return $data[$name];
    }
}


$cache = new cache();
$cache->read('noto');

シングルトンと組み合わせて、もう少し改良してあげれば、CakeでいうところのConfigure::read()と似たようなことができるようになりそうですね。

Comments