You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nextcloud-server/lib/private/Memcache/WithLocalCache.php

59 lines
1.3 KiB

<?php
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OC\Memcache;
use OCP\Cache\CappedMemoryCache;
use OCP\ICache;
/**
* Wrap a cache instance with an extra later of local, in-memory caching
*/
class WithLocalCache implements ICache {
private ICache $inner;
private CappedMemoryCache $cached;
public function __construct(ICache $inner, int $localCapacity = 512) {
$this->inner = $inner;
$this->cached = new CappedMemoryCache($localCapacity);
}
public function get($key) {
if (isset($this->cached[$key])) {
return $this->cached[$key];
} else {
$value = $this->inner->get($key);
if (!is_null($value)) {
$this->cached[$key] = $value;
}
return $value;
}
}
public function set($key, $value, $ttl = 0) {
$this->cached[$key] = $value;
return $this->inner->set($key, $value, $ttl);
}
public function hasKey($key) {
return isset($this->cached[$key]) || $this->inner->hasKey($key);
}
public function remove($key) {
unset($this->cached[$key]);
return $this->inner->remove($key);
}
public function clear($prefix = '') {
$this->cached->clear();
return $this->inner->clear($prefix);
}
public static function isAvailable(): bool {
return false;
}
}