Mercurial > hg > cmmr2012-drupal-site
comparison vendor/doctrine/cache/lib/Doctrine/Common/Cache/RedisCache.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c75dbcec494b |
---|---|
1 <?php | |
2 /* | |
3 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
4 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
5 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
6 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
7 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
8 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
9 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
10 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
11 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
12 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
13 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
14 * | |
15 * This software consists of voluntary contributions made by many individuals | |
16 * and is licensed under the MIT license. For more information, see | |
17 * <http://www.doctrine-project.org>. | |
18 */ | |
19 | |
20 namespace Doctrine\Common\Cache; | |
21 | |
22 use Redis; | |
23 | |
24 /** | |
25 * Redis cache provider. | |
26 * | |
27 * @link www.doctrine-project.org | |
28 * @since 2.2 | |
29 * @author Osman Ungur <osmanungur@gmail.com> | |
30 */ | |
31 class RedisCache extends CacheProvider | |
32 { | |
33 /** | |
34 * @var Redis|null | |
35 */ | |
36 private $redis; | |
37 | |
38 /** | |
39 * Sets the redis instance to use. | |
40 * | |
41 * @param Redis $redis | |
42 * | |
43 * @return void | |
44 */ | |
45 public function setRedis(Redis $redis) | |
46 { | |
47 $redis->setOption(Redis::OPT_SERIALIZER, $this->getSerializerValue()); | |
48 $this->redis = $redis; | |
49 } | |
50 | |
51 /** | |
52 * Gets the redis instance used by the cache. | |
53 * | |
54 * @return Redis|null | |
55 */ | |
56 public function getRedis() | |
57 { | |
58 return $this->redis; | |
59 } | |
60 | |
61 /** | |
62 * {@inheritdoc} | |
63 */ | |
64 protected function doFetch($id) | |
65 { | |
66 return $this->redis->get($id); | |
67 } | |
68 | |
69 /** | |
70 * {@inheritdoc} | |
71 */ | |
72 protected function doFetchMultiple(array $keys) | |
73 { | |
74 $fetchedItems = array_combine($keys, $this->redis->mget($keys)); | |
75 | |
76 // Redis mget returns false for keys that do not exist. So we need to filter those out unless it's the real data. | |
77 $foundItems = array(); | |
78 | |
79 foreach ($fetchedItems as $key => $value) { | |
80 if (false !== $value || $this->redis->exists($key)) { | |
81 $foundItems[$key] = $value; | |
82 } | |
83 } | |
84 | |
85 return $foundItems; | |
86 } | |
87 | |
88 /** | |
89 * {@inheritdoc} | |
90 */ | |
91 protected function doSaveMultiple(array $keysAndValues, $lifetime = 0) | |
92 { | |
93 if ($lifetime) { | |
94 $success = true; | |
95 | |
96 // Keys have lifetime, use SETEX for each of them | |
97 foreach ($keysAndValues as $key => $value) { | |
98 if (!$this->redis->setex($key, $lifetime, $value)) { | |
99 $success = false; | |
100 } | |
101 } | |
102 | |
103 return $success; | |
104 } | |
105 | |
106 // No lifetime, use MSET | |
107 return (bool) $this->redis->mset($keysAndValues); | |
108 } | |
109 | |
110 /** | |
111 * {@inheritdoc} | |
112 */ | |
113 protected function doContains($id) | |
114 { | |
115 return $this->redis->exists($id); | |
116 } | |
117 | |
118 /** | |
119 * {@inheritdoc} | |
120 */ | |
121 protected function doSave($id, $data, $lifeTime = 0) | |
122 { | |
123 if ($lifeTime > 0) { | |
124 return $this->redis->setex($id, $lifeTime, $data); | |
125 } | |
126 | |
127 return $this->redis->set($id, $data); | |
128 } | |
129 | |
130 /** | |
131 * {@inheritdoc} | |
132 */ | |
133 protected function doDelete($id) | |
134 { | |
135 return $this->redis->delete($id) >= 0; | |
136 } | |
137 | |
138 /** | |
139 * {@inheritdoc} | |
140 */ | |
141 protected function doFlush() | |
142 { | |
143 return $this->redis->flushDB(); | |
144 } | |
145 | |
146 /** | |
147 * {@inheritdoc} | |
148 */ | |
149 protected function doGetStats() | |
150 { | |
151 $info = $this->redis->info(); | |
152 return array( | |
153 Cache::STATS_HITS => $info['keyspace_hits'], | |
154 Cache::STATS_MISSES => $info['keyspace_misses'], | |
155 Cache::STATS_UPTIME => $info['uptime_in_seconds'], | |
156 Cache::STATS_MEMORY_USAGE => $info['used_memory'], | |
157 Cache::STATS_MEMORY_AVAILABLE => false | |
158 ); | |
159 } | |
160 | |
161 /** | |
162 * Returns the serializer constant to use. If Redis is compiled with | |
163 * igbinary support, that is used. Otherwise the default PHP serializer is | |
164 * used. | |
165 * | |
166 * @return integer One of the Redis::SERIALIZER_* constants | |
167 */ | |
168 protected function getSerializerValue() | |
169 { | |
170 if (defined('HHVM_VERSION')) { | |
171 return Redis::SERIALIZER_PHP; | |
172 } | |
173 | |
174 if (defined('Redis::SERIALIZER_IGBINARY') && extension_loaded('igbinary')) { | |
175 return Redis::SERIALIZER_IGBINARY; | |
176 } | |
177 | |
178 return Redis::SERIALIZER_PHP; | |
179 } | |
180 } |