ApcCache.php 4.47 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
 * ApcCache provides APC caching in terms of an application component.
Qiang Xue committed
12
 *
13
 * To use this application component, the [APC PHP extension](http://www.php.net/apc) must be loaded.
14
 * In order to enable APC for CLI you should add "apc.enable_cli = 1" to your php.ini.
Qiang Xue committed
15
 *
16
 * See [[Cache]] for common cache operations that ApcCache supports.
Qiang Xue committed
17 18
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
Qiang Xue committed
19
 * @since 2.0
Qiang Xue committed
20
 */
21
class ApcCache extends Cache
Qiang Xue committed
22
{
Qiang Xue committed
23
	/**
24 25 26 27 28 29 30 31
	 * 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.
Qiang Xue committed
32
	 */
33
	public function exists($key)
Qiang Xue committed
34
	{
35
		$key = $this->buildKey($key);
Qiang Xue committed
36 37 38
		return apc_exists($key);
	}

Qiang Xue committed
39 40 41 42
	/**
	 * 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
43
	 * @return string|boolean the value stored in cache, false if the value is not in the cache or expired.
Qiang Xue committed
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
	 */
	protected function getValue($key)
	{
		return apc_fetch($key);
	}

	/**
	 * Retrieves multiple values from cache with the specified keys.
	 * @param array $keys a list of keys identifying the cached values
	 * @return array a list of cached values indexed by the keys
	 */
	protected function getValues($keys)
	{
		return apc_fetch($keys);
	}

	/**
	 * 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
	 */
69
	protected function setValue($key, $value, $expire)
Qiang Xue committed
70
	{
71
		return apc_store($key, $value, $expire);
Qiang Xue committed
72 73
	}

74 75 76 77 78 79 80 81 82 83 84
	/**
	 * Stores multiple key-value pairs in cache.
	 * @param array $data array where key corresponds to cache key while value
	 * @param integer $expire the number of seconds in which the cached values will expire. 0 means never expire.
	 * @return array array of failed keys
	 */
	protected function setValues($data, $expire)
	{
		return array_keys(apc_store($data, null, $expire));
	}

Qiang Xue committed
85 86 87 88 89 90 91 92
	/**
	 * 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
	 */
93
	protected function addValue($key, $value, $expire)
Qiang Xue committed
94
	{
95
		return apc_add($key, $value, $expire);
Qiang Xue committed
96 97
	}

98 99 100 101 102 103 104 105 106 107 108
	/**
	 * Adds multiple key-value pairs to cache.
	 * @param array $data array where key corresponds to cache key while value is the value stored
	 * @param integer $expire the number of seconds in which the cached values will expire. 0 means never expire.
	 * @return array array of failed keys
	 */
	protected function addValues($data, $expire)
	{
		return array_keys(apc_add($data, null, $expire));
	}

Qiang Xue committed
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
	/**
	 * 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 apc_delete($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()
	{
127 128 129 130 131
		if (extension_loaded('apcu')) {
			return apc_clear_cache();
		} else {
			return apc_clear_cache('user');
		}
Qiang Xue committed
132 133
	}
}