Skip to content

Commit

Permalink
Introducing $MCACHE - Memory-based cache
Browse files Browse the repository at this point in the history
$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.
  • Loading branch information
martinlanghoff committed Dec 27, 2006
1 parent c96a4a4 commit 419e1d9
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
10 changes: 10 additions & 0 deletions lib/setup.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@
* @global object(session) $SESSION
*/
global $SESSION;
/**
* Definition of shared memory cache
*/
global $MCACHE;
/**
* Definition of course type
* @global object(course) $COURSE
Expand Down Expand Up @@ -251,6 +255,12 @@
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)) {
Expand Down
25 changes: 25 additions & 0 deletions lib/setuplib.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

?>

0 comments on commit 419e1d9

Please sign in to comment.