summaryrefslogtreecommitdiffstats
path: root/lib/private/Memcache/WithLocalCache.php
blob: 5b7ccc10e396669cd0dd3bcd473461af3fa559bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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;
	}
}