From 419e1d937ee9f1351be2e6882a93016f08abec2a Mon Sep 17 00:00:00 2001 From: martinlanghoff Date: Wed, 27 Dec 2006 22:44:39 +0000 Subject: [PATCH] Introducing $MCACHE - Memory-based cache $MCACHE is initially based on core API that is shared between memcached and turckmmcache/eaccelerator. The core operations are add(), set() and delete() This initial implementation uses the PECL-based PHP client. Would be trivial to add support for a PHP-based client. The $MCACHE facility can be used for DB cache, text filters cache, and possibly for sessions. --- lib/setup.php | 10 ++++++++++ lib/setuplib.php | 25 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/lib/setup.php b/lib/setup.php index dfecd40dc4..fff6683b00 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -44,6 +44,10 @@ global $CFG; * @global object(session) $SESSION */ global $SESSION; +/** + * Definition of shared memory cache + */ +global $MCACHE; /** * Definition of course type * @global object(course) $COURSE @@ -251,6 +255,12 @@ global $HTTPSPAGEREQUIRED; unset($originaldatabasedebug); error_reporting($CFG->debug); +/// Shared-Memory cache init -- will set $MCACHE +/// $MCACHE is a global object that offers at least add(), set() and delete() +/// with similar semantics to the memcached PHP API http://php.net/memcache + if (!empty($CFG->memcached) && !empty($CFG->memcachedhosts)) { + init_memcached(); + } /// Set a default enrolment configuration (see bug 1598) if (!isset($CFG->enrol)) { diff --git a/lib/setuplib.php b/lib/setuplib.php index ba4bfb9655..d8e19a3bb1 100644 --- a/lib/setuplib.php +++ b/lib/setuplib.php @@ -209,4 +209,29 @@ function setup_is_unicodedb() { return $unicodedb; } +function init_memcached() { + global $CFG, $MCACHE; + + if (!function_exists('memcache_connect')) { + debugging("Memcached is set to true but the memcached extension is not installed"); + return false; + } + + $hosts = split(',', $CFG->memcachedhosts); + $MCACHE = new Memcache; + if (count($hosts) === 1) { + // the faster pconnect is only available + // for single-server setups + $MCACHE->pconnect($hosts[0]); + } else { + // multi-host setup will share key space + foreach ($hosts as $host) { + $host = trim($host); + $MCACHE->addServer($host); + } + } + + return true; +} + ?> -- 2.39.5