Blame view

sources/lib/private/memcache/memcached.php 2.03 KB
31b7f2792   Kload   Upgrade to ownclo...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <?php
  /**
   * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
   * This file is licensed under the Affero General Public License version 3 or
   * later.
   * See the COPYING-README file.
   */
  
  namespace OC\Memcache;
  
  class Memcached extends Cache {
  	/**
  	 * @var \Memcached $cache
  	 */
  	private static $cache = null;
  
  	public function __construct($prefix = '') {
  		parent::__construct($prefix);
  		if (is_null(self::$cache)) {
  			self::$cache = new \Memcached();
6d9380f96   Cédric Dupont   Update sources OC...
21
22
23
24
25
26
27
28
29
30
  			$servers = \OC_Config::getValue('memcached_servers');
  			if (!$servers) {
  				$server = \OC_Config::getValue('memcached_server');
  				if ($server) {
  					$servers = array($server);
  				} else {
  					$servers = array(array('localhost', 11211));
  				}
  			}
  			self::$cache->addServers($servers);
31b7f2792   Kload   Upgrade to ownclo...
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  		}
  	}
  
  	/**
  	 * entries in XCache gets namespaced to prevent collisions between owncloud instances and users
  	 */
  	protected function getNameSpace() {
  		return $this->prefix;
  	}
  
  	public function get($key) {
  		$result = self::$cache->get($this->getNamespace() . $key);
  		if ($result === false and self::$cache->getResultCode() == \Memcached::RES_NOTFOUND) {
  			return null;
  		} else {
  			return $result;
  		}
  	}
  
  	public function set($key, $value, $ttl = 0) {
  		if ($ttl > 0) {
  			return self::$cache->set($this->getNamespace() . $key, $value, $ttl);
  		} else {
  			return self::$cache->set($this->getNamespace() . $key, $value);
  		}
  	}
  
  	public function hasKey($key) {
  		self::$cache->get($this->getNamespace() . $key);
6d9380f96   Cédric Dupont   Update sources OC...
60
  		return self::$cache->getResultCode() === \Memcached::RES_SUCCESS;
31b7f2792   Kload   Upgrade to ownclo...
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  	}
  
  	public function remove($key) {
  		return self::$cache->delete($this->getNamespace() . $key);
  	}
  
  	public function clear($prefix = '') {
  		$prefix = $this->getNamespace() . $prefix;
  		$allKeys = self::$cache->getAllKeys();
  		$keys = array();
  		$prefixLength = strlen($prefix);
  		foreach ($allKeys as $key) {
  			if (substr($key, 0, $prefixLength) === $prefix) {
  				$keys[] = $key;
  			}
  		}
  		self::$cache->deleteMulti($keys);
  		return true;
  	}
  
  	static public function isAvailable() {
  		return extension_loaded('memcached');
  	}
  }