3 * @copyright Copyright (C) 2010-2023, the Friendica project
5 * @license GNU AGPL version 3 or any later version
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as
9 * published by the Free Software Foundation, either version 3 of the
10 * License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Affero General Public License for more details.
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 namespace Friendica\Core\Cache\Type;
24 use Friendica\Core\Cache\Capability\ICanCache;
27 * Abstract class for common used functions
29 abstract class AbstractCache implements ICanCache
31 public static $NAME = '';
34 * @var string The hostname
38 public function __construct(string $hostName)
40 $this->hostName = $hostName;
44 * Returns the prefix (to avoid namespace conflicts)
48 protected function getPrefix(): string
50 // We fetch with the hostname as key to avoid problems with other applications
51 return $this->hostName;
55 * @param string $key The original key
57 * @return string The cache key used for the cache
59 protected function getCacheKey(string $key): string
61 return $this->getPrefix() . ":" . $key;
65 * @param string[] $keys A list of cached keys
67 * @return string[] A list of original keys
69 protected function getOriginalKeys(array $keys): array
74 // Keys are prefixed with the node hostname, let's remove it
75 array_walk($keys, function (&$value) {
76 $value = preg_replace('/^' . $this->hostName . ':/', '', $value);
86 * Filters the keys of an array with a given prefix
87 * Returns the filtered keys as an new array
89 * @param string[] $keys The keys, which should get filtered
90 * @param string|null $prefix The prefix (if null, all keys will get returned)
92 * @return string[] The filtered array with just the keys
94 protected function filterArrayKeysByPrefix(array $keys, string $prefix = null): array
101 foreach ($keys as $key) {
102 if (strpos($key, $prefix) === 0) {
103 array_push($result, $key);
112 public function getName(): string
114 return static::$NAME;