1 | <?php |
||
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 | 80 | public function setRedis(Redis $redis) |
|
50 | |||
51 | /** |
||
52 | * Gets the redis instance used by the cache. |
||
53 | * |
||
54 | * @return Redis|null |
||
55 | */ |
||
56 | 2 | public function getRedis() |
|
60 | |||
61 | /** |
||
62 | * {@inheritdoc} |
||
63 | */ |
||
64 | 75 | protected function doFetch($id) |
|
68 | |||
69 | /** |
||
70 | * {@inheritdoc} |
||
71 | */ |
||
72 | 2 | protected function doFetchMultiple(array $keys) |
|
73 | { |
||
74 | 2 | $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 | 2 | $foundItems = []; |
|
78 | |||
79 | 2 | foreach ($fetchedItems as $key => $value) { |
|
80 | 2 | if (false !== $value || $this->redis->exists($key)) { |
|
81 | 2 | $foundItems[$key] = $value; |
|
82 | 2 | } |
|
83 | 2 | } |
|
84 | |||
85 | 2 | return $foundItems; |
|
86 | } |
||
87 | |||
88 | /** |
||
89 | * {@inheritdoc} |
||
90 | */ |
||
91 | 1 | protected function doSaveMultiple(array $keysAndValues, $lifetime = 0) |
|
92 | { |
||
93 | 1 | 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 | 1 | return (bool) $this->redis->mset($keysAndValues); |
|
108 | } |
||
109 | |||
110 | /** |
||
111 | * {@inheritdoc} |
||
112 | */ |
||
113 | 70 | protected function doContains($id) |
|
117 | |||
118 | /** |
||
119 | * {@inheritdoc} |
||
120 | */ |
||
121 | 73 | protected function doSave($id, $data, $lifeTime = 0) |
|
129 | |||
130 | /** |
||
131 | * {@inheritdoc} |
||
132 | */ |
||
133 | 44 | protected function doDelete($id) |
|
137 | |||
138 | /** |
||
139 | * {@inheritdoc} |
||
140 | */ |
||
141 | 1 | protected function doDeleteMultiple(array $keys) |
|
142 | { |
||
143 | 1 | return $this->redis->delete($keys) >= 0; |
|
144 | } |
||
145 | |||
146 | /** |
||
147 | * {@inheritdoc} |
||
148 | */ |
||
149 | 2 | protected function doFlush() |
|
153 | |||
154 | /** |
||
155 | * {@inheritdoc} |
||
156 | */ |
||
157 | 2 | protected function doGetStats() |
|
168 | |||
169 | /** |
||
170 | * Returns the serializer constant to use. If Redis is compiled with |
||
171 | * igbinary support, that is used. Otherwise the default PHP serializer is |
||
172 | * used. |
||
173 | * |
||
174 | * @return integer One of the Redis::SERIALIZER_* constants |
||
175 | */ |
||
176 | 80 | protected function getSerializerValue() |
|
184 | } |
||
185 |