Browse Source

cache display names in local memory before external memcache

Signed-off-by: Robin Appelman <robin@icewind.nl>
tags/v25.0.0beta1
Robin Appelman 2 years ago
parent
commit
674c0bec2c
No account linked to committer's email address
1 changed files with 14 additions and 6 deletions
  1. 14
    6
      lib/private/User/DisplayNameCache.php

+ 14
- 6
lib/private/User/DisplayNameCache.php View File

@@ -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
}
}
}

Loading…
Cancel
Save