From b18b960fb09c2433fe547239da0608bcd1ae40b6 Mon Sep 17 00:00:00 2001 From: Anonymous Contributor Date: Sun, 10 Sep 2023 02:41:36 +0200 Subject: [PATCH] Use APCu (if available) to cache username lookups --- app/OpenSim.php | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/app/OpenSim.php b/app/OpenSim.php index b5e08c0..6283813 100644 --- a/app/OpenSim.php +++ b/app/OpenSim.php @@ -10,11 +10,12 @@ class OpenSim { private PDO $pdo; - private $cache = array(); + private bool $apcu; public function __construct(PDO $pdo) { $this->pdo = $pdo; + $this->apcu = function_exists('apcu_fetch') && apcu_enabled(); } private function getUserNameFromGridData($userID, $table, $row): ?string @@ -28,10 +29,11 @@ class OpenSim if (count($userData) >= 3) { $dbUserID = $userData[0]; $dbUserName = $userData[2]; - - $this->cache['USERNAME'][$userID] = $dbUserName; - + if ($dbUserID == $userID) { + if ($this->apcu) { + apcu_store('os_username_'.$userID, $dbUserName, 600); + } return $dbUserName; } } @@ -46,16 +48,20 @@ class OpenSim return "Unknown User"; } - if (isset($this->cache['USERNAME'][$userID])) { - return $this->cache['USERNAME'][$userID]; + if ($this->apcu && apcu_exists('os_username_'.$userID)) { + return apcu_fetch('os_username_'.$userID); } $statementUser = $this->pdo->prepare('SELECT FirstName,LastName FROM UserAccounts WHERE PrincipalID = ?'); $statementUser->execute(array($userID)); if ($rowUser = $statementUser->fetch()) { - $this->cache['USERNAME'][$userID] = $rowUser['FirstName'].' '.$rowUser['LastName']; - return $this->cache['USERNAME'][$userID]; + $name = $rowUser['FirstName'].' '.$rowUser['LastName']; + if ($this->apcu) { + apcu_store('os_username_'.$userID, $name, 300); + } + + return $name; } $res = $this->getUserNameFromGridData($userID, 'GridUser', 'UserID');