diff options
author | Robin Appelman <robin@icewind.nl> | 2023-02-09 15:05:34 +0100 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2023-02-10 12:25:23 +0100 |
commit | 853ec60f3eadceebc3955893d6ed4960f5697058 (patch) | |
tree | b5e7a833f81cc00511d57ac017a8b014ad85ac6d /lib/private/Memcache | |
parent | 7341d339eb7a1aa20c6b35e8edb40c1cd7946b96 (diff) | |
download | nextcloud-server-853ec60f3eadceebc3955893d6ed4960f5697058.tar.gz nextcloud-server-853ec60f3eadceebc3955893d6ed4960f5697058.zip |
also cache backend for user in memory instead of always going to redis
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib/private/Memcache')
-rw-r--r-- | lib/private/Memcache/WithLocalCache.php | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/private/Memcache/WithLocalCache.php b/lib/private/Memcache/WithLocalCache.php new file mode 100644 index 00000000000..5b7ccc10e39 --- /dev/null +++ b/lib/private/Memcache/WithLocalCache.php @@ -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; + } +} |