mirror of https://github.com/nextcloud/server.git
Merge pull request #36639 from nextcloud/userbackend-local-cache
also cache backend for user in memory instead of always going to redispull/36689/head
commit
364e7693b9
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue