3 namespace Friendica\Core\Cache;
\r
5 use Friendica\BaseObject;
\r
6 use Friendica\Core\Cache;
\r
9 * Memcache Cache Driver
\r
11 * @author Hypolite Petovan <mrpetovan@gmail.com>
\r
13 class MemcacheCacheDriver extends BaseObject implements ICacheDriver
\r
20 public function __construct($memcache_host, $memcache_port)
\r
22 if (!class_exists('Memcache', false)) {
\r
23 throw new \Exception('Memcache class isn\'t available');
\r
26 $this->memcache = new \Memcache();
\r
28 if (!$this->memcache->connect($memcache_host, $memcache_port)) {
\r
29 throw new \Exception('Expected Memcache server at ' . $memcache_host . ':' . $memcache_port . ' isn\'t available');
\r
33 public function get($key)
\r
37 // We fetch with the hostname as key to avoid problems with other applications
\r
38 $cached = $this->memcache->get(self::getApp()->get_hostname() . ':' . $key);
\r
40 // @see http://php.net/manual/en/memcache.get.php#84275
\r
41 if (is_bool($cached) || is_double($cached) || is_long($cached)) {
\r
45 $value = @unserialize($cached);
\r
47 // Only return a value if the serialized value is valid.
\r
48 // We also check if the db entry is a serialized
\r
49 // boolean 'false' value (which we want to return).
\r
50 if ($cached === serialize(false) || $value !== false) {
\r
57 public function set($key, $value, $duration = Cache::MONTH)
\r
59 // We store with the hostname as key to avoid problems with other applications
\r
60 return $this->memcache->set(
\r
61 self::getApp()->get_hostname() . ":" . $key,
\r
63 MEMCACHE_COMPRESSED,
\r
64 Cache::duration($duration)
\r
68 public function delete($key)
\r
70 return $this->memcache->delete($key);
\r
73 public function clear()
\r