ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/ebihara/prj_memcached/webapp/lib/Cache/Container/memcached.php @ 3181

Last change on this file since 3181 was 3181, checked in by ebihara, 13 years ago

memcachedに置くキャッシュの作成、削除ができるようにした

File size: 2.9 KB
Line 
1<?php
2
3require_once 'Cache/Container.php';
4
5/**
6* PEAR/DB Cache Container.
7*
8* WARNING: Other systems might or might not support certain datatypes of
9* the tables shown. As far as I know there's no large binary
10* type in SQL-92 or SQL-99. Postgres seems to lack any
11* BLOB or TEXT type, for MS-SQL you could use IMAGE, don't know
12* about other databases. Please add sugestions for other databases to
13* the inline docs.
14*
15* The field 'changed' has no meaning for the Cache itself. It's just there
16* because it's a good idea to have an automatically updated timestamp
17* field for debugging in all of your tables.
18*
19* For _MySQL_ you need this DB table:
20*
21* CREATE TABLE cache (
22*   id          CHAR(32) NOT null DEFAULT '',
23*   cachegroup  VARCHAR(127) NOT null DEFAULT '',
24*   cachedata   BLOB NOT null DEFAULT '',
25*   userdata    VARCHAR(255) NOT null DEFAULT '',
26*   expires     INT(9) NOT null DEFAULT 0,
27*
28*   changed     TIMESTAMP(14) NOT null,
29*
30*   INDEX (expires),
31*   PRIMARY KEY (id, cachegroup)
32* )
33*
34* @author   Sebastian Bergmann <sb@sebastian-bergmann.de>
35* @version  $Id: db.php,v 1.8 2005/01/26 09:42:30 dufuz Exp $
36* @package  Cache
37*/
38class Cache_Container_memcached extends Cache_Container
39{
40
41    var $memcached;
42
43    function Cache_Container_memcached($options)
44    {
45        $this->setOptions($options, $this->allowed_options);
46
47        $this->memcached = new Memcache;
48        $this->memcached->connect($options['hostname'], $options['port']);
49    }
50
51    function fetch($id, $group)
52    {var_dump($id . '-fetch');
53        $cachedata = $this->memcached->get($id);
54        var_dump($cachedata);
55        $unserialized = unserialize($this->decode($cachedata));
56        $expire = 0;  // ロード時のexpireは判定には用いない
57        $userdata = '';
58        $data = array($expire, $unserializeds, $userdata);
59
60        return $data;
61    }
62
63    function save($id, $data, $expires, $group, $userdata)
64    {var_dump($id . '-save'); var_dump($expires);
65        $this->expires = $expires;
66        $serialized = $this->encode(serialize($data));
67        $res = $this->memcached->set($id, $serialized, 0, $expires);
68    }
69
70    function remove($id, $group)
71    {var_dump($id . '-remove');
72        return $this->memcached->delete($id);
73    }
74
75    function flush($group = '')
76    {var_dump($id . '-flush');
77        $this->flushPreload();
78        return null;
79    }
80
81    function idExists($id, $group)
82    {
83        return (bool)$this->memcached->get($id);
84    }
85
86
87    function isExpired($id, $group, $max_age)
88    {
89        // memcachedはコール時に指定した時間で削除されるので、キャッシュ生存期間判定は不要
90        // よって、キャッシュが存在しているかどうかで生存期間内かどうかを判定
91        return $this->idExists($id, $group);
92    }
93
94    function garbageCollection($maxlifetime)
95    {
96        $this->flushPreload();
97        return true;
98    }
99
100}
101?>
Note: See TracBrowser for help on using the repository browser.