diff options
author | blizzz <blizzz@arthur-schiwon.de> | 2022-04-22 15:51:46 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-22 15:51:46 +0300 |
commit | cfc1c21a80c90f8668846ed528f7b4355cbb6c24 (patch) | |
tree | 941ccb9742488d4f735bfd73d3bfdaa2729954ec | |
parent | 102d119297a4b8ee0ae5132fce77cccdea892b7e (diff) | |
parent | 674c0bec2cbe131e13c17ac1de4f47007f2b2821 (diff) |
Merge pull request #32071 from nextcloud/performance/cache-display-name
cache display names in local memory before external memcache
-rw-r--r-- | lib/private/User/DisplayNameCache.php | 20 |
1 files 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 } } } |