From 674c0bec2cbe131e13c17ac1de4f47007f2b2821 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 22 Apr 2022 12:50:42 +0200 Subject: [PATCH] cache display names in local memory before external memcache Signed-off-by: Robin Appelman --- lib/private/User/DisplayNameCache.php | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/private/User/DisplayNameCache.php b/lib/private/User/DisplayNameCache.php index ed0c723ef37..22a79863e49 100644 --- a/lib/private/User/DisplayNameCache.php +++ b/lib/private/User/DisplayNameCache.php @@ -38,17 +38,22 @@ use OCP\User\Events\UserChangedEvent; * outdated. */ class DisplayNameCache implements IEventListener { - private ICache $internalCache; + private array $cache = []; + private ICache $memCache; private IUserManager $userManager; public function __construct(ICacheFactory $cacheFactory, IUserManager $userManager) { - $this->internalCache = $cacheFactory->createDistributed('displayNameMappingCache'); + $this->memCache = $cacheFactory->createDistributed('displayNameMappingCache'); $this->userManager = $userManager; } public function getDisplayName(string $userId) { - $displayName = $this->internalCache->get($userId); + if (isset($this->cache[$userId])) { + return $this->cache[$userId]; + } + $displayName = $this->memCache->get($userId); if ($displayName) { + $this->cache[$userId] = $displayName; return $displayName; } @@ -58,20 +63,23 @@ class DisplayNameCache implements IEventListener { } else { $displayName = $userId; } - $this->internalCache->set($userId, $displayName, 60 * 10); // 10 minutes + $this->cache[$userId] = $displayName; + $this->memCache->set($userId, $displayName, 60 * 10); // 10 minutes return $displayName; } public function clear(): void { - $this->internalCache->clear(); + $this->cache = []; + $this->memCache->clear(); } public function handle(Event $event): void { if ($event instanceof UserChangedEvent && $event->getFeature() === 'displayName') { $userId = $event->getUser()->getUID(); $newDisplayName = $event->getValue(); - $this->internalCache->set($userId, $newDisplayName, 60 * 10); // 10 minutes + $this->cache[$userId] = $newDisplayName; + $this->memCache->set($userId, $newDisplayName, 60 * 10); // 10 minutes } } } -- 2.39.5