XCache.php 3.6 KB
Newer Older
Qiang Xue committed
1 2 3
<?php
/**
 * @link http://www.yiiframework.com/
Qiang Xue committed
4
 * @copyright Copyright (c) 2008 Yii Software LLC
Qiang Xue committed
5 6 7
 * @license http://www.yiiframework.com/license/
 */

Qiang Xue committed
8 9
namespace yii\caching;

Qiang Xue committed
10
/**
11
 * XCache provides XCache caching in terms of an application component.
Qiang Xue committed
12
 *
13 14 15
 * To use this application component, the [XCache PHP extension](http://xcache.lighttpd.net/) must be loaded.
 * Also note that the [[flush()]] functionality will work correctly only if "xcache.admin.enable_auth"
 * is set to "Off" in php.ini.
Qiang Xue committed
16
 *
17
 * See [[Cache]] for common cache operations that XCache supports.
Qiang Xue committed
18
 *
Qiang Xue committed
19 20
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
Qiang Xue committed
21
 */
22
class XCache extends Cache
Qiang Xue committed
23
{
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
	/**
	 * Checks whether a specified key exists in the cache.
	 * This can be faster than getting the value from the cache if the data is big.
	 * Note that this method does not check whether the dependency associated
	 * with the cached data, if there is any, has changed. So a call to [[get]]
	 * may return false while exists returns true.
	 * @param mixed $key a key identifying the cached value. This can be a simple string or
	 * a complex data structure consisting of factors representing the key.
	 * @return boolean true if a value exists in cache, false if the value is not in the cache or expired.
	 */
	public function exists($key)
	{
		$key = $this->buildKey($key);
		return xcache_isset($key);
	}

Qiang Xue committed
40 41 42 43
	/**
	 * Retrieves a value from cache with a specified key.
	 * This is the implementation of the method declared in the parent class.
	 * @param string $key a unique key identifying the cached value
44
	 * @return string|boolean the value stored in cache, false if the value is not in the cache or expired.
Qiang Xue committed
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
	 */
	protected function getValue($key)
	{
		return xcache_isset($key) ? xcache_get($key) : false;
	}

	/**
	 * Stores a value identified by a key in cache.
	 * This is the implementation of the method declared in the parent class.
	 *
	 * @param string $key the key identifying the value to be cached
	 * @param string $value the value to be cached
	 * @param integer $expire the number of seconds in which the cached value will expire. 0 means never expire.
	 * @return boolean true if the value is successfully stored into cache, false otherwise
	 */
60
	protected function setValue($key, $value, $expire)
Qiang Xue committed
61
	{
62
		return xcache_set($key, $value, $expire);
Qiang Xue committed
63 64 65 66 67 68 69 70 71 72 73
	}

	/**
	 * Stores a value identified by a key into cache if the cache does not contain this key.
	 * This is the implementation of the method declared in the parent class.
	 *
	 * @param string $key the key identifying the value to be cached
	 * @param string $value the value to be cached
	 * @param integer $expire the number of seconds in which the cached value will expire. 0 means never expire.
	 * @return boolean true if the value is successfully stored into cache, false otherwise
	 */
74
	protected function addValue($key, $value, $expire)
Qiang Xue committed
75
	{
76
		return !xcache_isset($key) ? $this->setValue($key, $value, $expire) : false;
Qiang Xue committed
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
	}

	/**
	 * Deletes a value with the specified key from cache
	 * This is the implementation of the method declared in the parent class.
	 * @param string $key the key of the value to be deleted
	 * @return boolean if no error happens during deletion
	 */
	protected function deleteValue($key)
	{
		return xcache_unset($key);
	}

	/**
	 * Deletes all values from cache.
	 * This is the implementation of the method declared in the parent class.
	 * @return boolean whether the flush operation was successful.
	 */
	protected function flushValues()
	{
97 98
		for ($i = 0, $max = xcache_count(XC_TYPE_VAR); $i < $max; $i++) {
			if (xcache_clear_cache(XC_TYPE_VAR, $i) === false) {
Qiang Xue committed
99
				return false;
100
			}
Qiang Xue committed
101 102 103 104
		}
		return true;
	}
}