Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/infrastructure/cache/PhutilKeyValueCacheNamespace.php
12241 views
1
<?php
2
3
final class PhutilKeyValueCacheNamespace extends PhutilKeyValueCacheProxy {
4
5
private $namespace;
6
7
public function setNamespace($namespace) {
8
if (strpos($namespace, ':') !== false) {
9
throw new Exception(pht("Namespace can't contain colons."));
10
}
11
12
$this->namespace = $namespace.':';
13
14
return $this;
15
}
16
17
public function setKeys(array $keys, $ttl = null) {
18
return parent::setKeys(array_combine(
19
$this->prefixKeys(array_keys($keys)),
20
$keys), $ttl);
21
}
22
23
public function getKeys(array $keys) {
24
$results = parent::getKeys($this->prefixKeys($keys));
25
26
if (!$results) {
27
return array();
28
}
29
30
return array_combine(
31
$this->unprefixKeys(array_keys($results)),
32
$results);
33
}
34
35
public function deleteKeys(array $keys) {
36
return parent::deleteKeys($this->prefixKeys($keys));
37
}
38
39
private function prefixKeys(array $keys) {
40
if ($this->namespace == null) {
41
throw new Exception(pht('Namespace not set.'));
42
}
43
44
$prefixed_keys = array();
45
foreach ($keys as $key) {
46
$prefixed_keys[] = $this->namespace.$key;
47
}
48
49
return $prefixed_keys;
50
}
51
52
private function unprefixKeys(array $keys) {
53
if ($this->namespace == null) {
54
throw new Exception(pht('Namespace not set.'));
55
}
56
57
$unprefixed_keys = array();
58
foreach ($keys as $key) {
59
$unprefixed_keys[] = substr($key, strlen($this->namespace));
60
}
61
62
return $unprefixed_keys;
63
}
64
65
}
66
67