Open Journal Systems  3.3.0
MemcacheCache.inc.php
1 <?php
2 
18 import('lib.pkp.classes.cache.GenericCache');
19 
20 // WARNING: This cache MUST be loaded in batch, or else many cache
21 // misses will result.
22 
23 // Pseudotypes used to represent false and null values in the cache
25 }
27 }
28 
29 class MemcacheCache extends GenericCache {
34 
38  var $flag;
39 
43  var $expire;
44 
48  function __construct($context, $cacheId, $fallback, $hostname, $port) {
49  parent::__construct($context, $cacheId, $fallback);
50  $this->connection = new Memcached;
51 
52  // FIXME This should use connection pooling
53  // XXX check whether memcached server is usable
54  if (!$this->connection->addServer($hostname, $port)) {
55  $this->connection = null;
56  }
57 
58  $this->flag = null;
59  $this->expire = 3600; // 1 hour default expiry
60  }
61 
65  function setFlag($flag) {
66  $this->flag = $flag;
67  }
68 
72  function setExpiry($expiry) {
73  $this->expire = $expiry;
74  }
75 
79  function flush() {
80  $this->connection->flush();
81  }
82 
87  function getCache($id) {
88  $result = $this->connection->get($this->getContext() . ':' . $this->getCacheId() . ':' . $id);
89  if ($this->connection->getResultCode() == Memcached::RES_NOTFOUND) {
90  return $this->cacheMiss;
91  }
92  switch (get_class($result)) {
93  case 'memcache_false':
94  $result = false;
95  case 'memcache_null':
96  $result = null;
97  }
98  return $result;
99  }
100 
107  function setCache($id, $value) {
108  if ($value === false) {
109  $value = new memcache_false;
110  } elseif ($value === null) {
111  $value = new memcache_null;
112  }
113  return ($this->connection->set($this->getContext() . ':' . $this->getCacheId() . ':' . $id, $value, $this->expire));
114  }
115 
119  function close() {
120  $this->connection->quit();
121  unset ($this->connection);
122  $this->contextChecked = false;
123  }
124 
132  function getCacheTime() {
133  return null;
134  }
135 
145  function setEntireCache($contents) {
146  foreach ($contents as $id => $value) {
147  $this->setCache($id, $value);
148  }
149  }
150 }
151 
152 
MemcacheCache\close
close()
Definition: MemcacheCache.inc.php:119
MemcacheCache\setExpiry
setExpiry($expiry)
Definition: MemcacheCache.inc.php:72
memcache_false
Definition: MemcacheCache.inc.php:24
MemcacheCache\__construct
__construct($context, $cacheId, $fallback, $hostname, $port)
Definition: MemcacheCache.inc.php:48
MemcacheCache\$expire
$expire
Definition: MemcacheCache.inc.php:43
MemcacheCache\setFlag
setFlag($flag)
Definition: MemcacheCache.inc.php:65
MemcacheCache\$connection
$connection
Definition: MemcacheCache.inc.php:33
GenericCache\getContext
getContext()
Definition: GenericCache.inc.php:121
MemcacheCache\$flag
$flag
Definition: MemcacheCache.inc.php:38
GenericCache\getCacheId
getCacheId()
Definition: GenericCache.inc.php:128
MemcacheCache
Provides caching based on Memcache.
Definition: MemcacheCache.inc.php:29
MemcacheCache\setCache
setCache($id, $value)
Definition: MemcacheCache.inc.php:107
GenericCache\$cacheMiss
$cacheMiss
Definition: GenericCache.inc.php:35
MemcacheCache\getCache
getCache($id)
Definition: MemcacheCache.inc.php:87
MemcacheCache\setEntireCache
setEntireCache($contents)
Definition: MemcacheCache.inc.php:145
GenericCache\$fallback
$fallback
Definition: GenericCache.inc.php:45
MemcacheCache\getCacheTime
getCacheTime()
Definition: MemcacheCache.inc.php:132
GenericCache\$context
$context
Definition: GenericCache.inc.php:28
memcache_null
Definition: MemcacheCache.inc.php:26
GenericCache
Provides implementation-independent caching. Although this class is intended to be overridden with a ...
Definition: GenericCache.inc.php:23
MemcacheCache\flush
flush()
Definition: MemcacheCache.inc.php:79
GenericCache\$cacheId
$cacheId
Definition: GenericCache.inc.php:33