From d9d00494d13ec66856526ac2426abaecf8cab257 Mon Sep 17 00:00:00 2001 From: kurund Date: Sat, 6 Apr 2013 06:17:20 +0530 Subject: [PATCH] cache civicrm_cache table --- CRM/Core/BAO/Cache.php | 84 +++++++++++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 22 deletions(-) diff --git a/CRM/Core/BAO/Cache.php b/CRM/Core/BAO/Cache.php index 298b9cbec8..e7323eaaa0 100644 --- a/CRM/Core/BAO/Cache.php +++ b/CRM/Core/BAO/Cache.php @@ -58,18 +58,32 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { * @access public */ static function &getItem($group, $path, $componentID = NULL) { - $dao = new CRM_Core_DAO_Cache(); - - $dao->group_name = $group; - $dao->path = $path; - $dao->component_id = $componentID; - - $data = NULL; - if ($dao->find(TRUE)) { - $data = unserialize($dao->data); + static $_cache = NULL; + if ($_cache === NULL) { + $_cache = array(); } - $dao->free(); - return $data; + + $argString = "CRM_CT_{$group}_{$path}_{$componentID}"; + if (!array_key_exists($argString, $_cache)) { + $cache = CRM_Utils_Cache::singleton(); + $_cache[$argString] = $cache->get($argString); + if (!$_cache[$argString]) { + $dao = new CRM_Core_DAO_Cache(); + + $dao->group_name = $group; + $dao->path = $path; + $dao->component_id = $componentID; + + $data = NULL; + if ($dao->find(TRUE)) { + $data = unserialize($dao->data); + } + $dao->free(); + $_cache[$argString] = $data; + $cache->set($argString, $_cache[$argString]); + } + } + return $_cache[$argString]; } /** @@ -83,18 +97,34 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { * @access public */ static function &getItems($group, $componentID = NULL) { - $dao = new CRM_Core_DAO_Cache(); - - $dao->group_name = $group; - $dao->component_id = $componentID; - $dao->find(); - - $result = array(); // array($path => $data) - while ($dao->fetch()) { - $result[$dao->path] = unserialize($dao->data); + static $_cache = NULL; + if ($_cache === NULL) { + $_cache = array(); } - $dao->free(); - return $result; + + $argString = "CRM_CT_CI_{$group}_{$componentID}"; + if (!array_key_exists($argString, $_cache)) { + $cache = CRM_Utils_Cache::singleton(); + $_cache[$argString] = $cache->get($argString); + if (!$_cache[$argString]) { + $dao = new CRM_Core_DAO_Cache(); + + $dao->group_name = $group; + $dao->component_id = $componentID; + $dao->find(); + + $result = array(); // array($path => $data) + while ($dao->fetch()) { + $result[$dao->path] = unserialize($dao->data); + } + $dao->free(); + + $_cache[$argString] = $result; + $cache->set($argString, $_cache[$argString]); + } + } + + return $_cache[$argString]; } /** @@ -110,6 +140,11 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { * @access public */ static function setItem(&$data, $group, $path, $componentID = NULL) { + static $_cache = NULL; + if ($_cache === NULL) { + $_cache = array(); + } + $dao = new CRM_Core_DAO_Cache(); $dao->group_name = $group; @@ -133,6 +168,11 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { $lock->release(); $dao->free(); + + // set the cache in memory + $argString = "CRM_CT_{$group}_{$path}_{$componentID}"; + $cache = CRM_Utils_Cache::singleton(); + $cache->set($argString, $dao->data); } /** -- 2.25.1