Browse Source
Merge pull request #40868 from nextcloud/feat/in-memory-cache-factory
feat: Add factory method for in-memory caches
pull/40887/head
Christoph Wurst
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
32 additions and
0 deletions
-
lib/private/Memcache/Factory.php
-
lib/public/ICacheFactory.php
-
tests/lib/Memcache/FactoryTest.php
|
|
@ -31,6 +31,7 @@ |
|
|
|
*/ |
|
|
|
namespace OC\Memcache; |
|
|
|
|
|
|
|
use OCP\Cache\CappedMemoryCache; |
|
|
|
use OCP\Profiler\IProfiler; |
|
|
|
use OCP\ICache; |
|
|
|
use OCP\ICacheFactory; |
|
|
@ -184,6 +185,10 @@ class Factory implements ICacheFactory { |
|
|
|
return $this->distributedCacheClass !== self::NULL_CACHE; |
|
|
|
} |
|
|
|
|
|
|
|
public function createInMemory(int $capacity = 512): ICache { |
|
|
|
return new CappedMemoryCache($capacity); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Check if a local memory cache backend is available |
|
|
|
* |
|
|
|
|
|
@ -75,4 +75,20 @@ interface ICacheFactory { |
|
|
|
* @since 13.0.0 |
|
|
|
*/ |
|
|
|
public function createLocal(string $prefix = ''): ICache; |
|
|
|
|
|
|
|
/** |
|
|
|
* Create an in-memory cache instance |
|
|
|
* |
|
|
|
* Useful for remembering values inside one process. Cache memory is cleared |
|
|
|
* when the object is garbage-collected. Implementation may also expire keys |
|
|
|
* earlier when the TTL is reached or too much memory is consumed. |
|
|
|
* |
|
|
|
* Cache keys are local to the cache object. When building two in-memory |
|
|
|
* caches, there is no data exchange between the instances. |
|
|
|
* |
|
|
|
* @param int $capacity maximum number of cache keys |
|
|
|
* @return ICache |
|
|
|
* @since 28.0.0 |
|
|
|
*/ |
|
|
|
public function createInMemory(int $capacity = 512): ICache; |
|
|
|
} |
|
|
@ -140,4 +140,15 @@ class FactoryTest extends \Test\TestCase { |
|
|
|
$profiler = $this->getMockBuilder(IProfiler::class)->getMock(); |
|
|
|
new \OC\Memcache\Factory('abc', $logger, $profiler, $localCache, $distributedCache); |
|
|
|
} |
|
|
|
|
|
|
|
public function testCreateInMemory(): void { |
|
|
|
$logger = $this->getMockBuilder(LoggerInterface::class)->getMock(); |
|
|
|
$profiler = $this->getMockBuilder(IProfiler::class)->getMock(); |
|
|
|
$factory = new \OC\Memcache\Factory('abc', $logger, $profiler, null, null, null); |
|
|
|
|
|
|
|
$cache = $factory->createInMemory(); |
|
|
|
$cache->set('test', 48); |
|
|
|
|
|
|
|
self::assertSame(48, $cache->get('test')); |
|
|
|
} |
|
|
|
} |