1: | <?php |
2: | |
3: | /** |
4: | * Memcache CacheResource |
5: | * CacheResource Implementation based on the KeyValueStore API to use |
6: | * memcache as the storage resource for Smarty's output caching. |
7: | * Note that memcache has a limitation of 256 characters per cache-key. |
8: | * To avoid complications all cache-keys are translated to a sha1 hash. |
9: | * |
10: | * @package CacheResource-examples |
11: | * @author Rodney Rehm |
12: | */ |
13: | class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore |
14: | { |
15: | /** |
16: | * memcache instance |
17: | * |
18: | * @var Memcache |
19: | */ |
20: | protected $memcache = null; |
21: | |
22: | /** |
23: | * Smarty_CacheResource_Memcache constructor. |
24: | */ |
25: | public function __construct() |
26: | { |
27: | if (class_exists('Memcached')) { |
28: | $this->memcache = new Memcached(); |
29: | } else { |
30: | $this->memcache = new Memcache(); |
31: | } |
32: | $this->memcache->addServer('127.0.0.1', 11211); |
33: | } |
34: | |
35: | /** |
36: | * Read values for a set of keys from cache |
37: | * |
38: | * @param array $keys list of keys to fetch |
39: | * |
40: | * @return array list of values with the given keys used as indexes |
41: | * @return boolean true on success, false on failure |
42: | */ |
43: | protected function read(array $keys) |
44: | { |
45: | $res = array(); |
46: | foreach ($keys as $key) { |
47: | $k = sha1($key); |
48: | $res[$key] = $this->memcache->get($k); |
49: | } |
50: | return $res; |
51: | } |
52: | |
53: | /** |
54: | * Save values for a set of keys to cache |
55: | * |
56: | * @param array $keys list of values to save |
57: | * @param int $expire expiration time |
58: | * |
59: | * @return boolean true on success, false on failure |
60: | */ |
61: | protected function write(array $keys, $expire = null) |
62: | { |
63: | foreach ($keys as $k => $v) { |
64: | $k = sha1($k); |
65: | if (class_exists('Memcached')) { |
66: | $this->memcache->set($k, $v, $expire); |
67: | } else { |
68: | $this->memcache->set($k, $v, 0, $expire); |
69: | } |
70: | } |
71: | return true; |
72: | } |
73: | |
74: | /** |
75: | * Remove values from cache |
76: | * |
77: | * @param array $keys list of keys to delete |
78: | * |
79: | * @return boolean true on success, false on failure |
80: | */ |
81: | protected function delete(array $keys) |
82: | { |
83: | foreach ($keys as $k) { |
84: | $k = sha1($k); |
85: | $this->memcache->delete($k); |
86: | } |
87: | return true; |
88: | } |
89: | |
90: | /** |
91: | * Remove *all* values from cache |
92: | * |
93: | * @return boolean true on success, false on failure |
94: | */ |
95: | protected function purge() |
96: | { |
97: | return $this->memcache->flush(); |
98: | } |
99: | } |
100: |