Voting

: min(zero, one)?
(Example: nine)

The Note You're Voting On

clancy hood at gmail dot com
13 years ago
If you're wanting to get started with Memcached on a relatively small project but need some scalability then it can make sense to allow $persistent_id to also denote both a key prefix and a server set which you define yourself. This keeps both key separation and allocation of data sets to certain server(s) incredibly simple throughout the project's life, without hampering any of your options.

<?php

// Here is the array which we will add to in the future
$GLOBALS['memcached-sets'] = array (
'_' => array (
array(
'localhost', 11211)
)
);

define('DEFAULT_MEMCACHED_SET', '_');

function
mcache( $persistent_id=DEFAULT_MEMCACHED_SET ) {

// one instantiation per-connection per-request
static $memcached_instances = array();

if(
array_key_exists($persistent_id, $memcached_instances)) {
$instance = $memcached_instances[$persistent_id];
}else{
$instance = new Memcached($persistent_id);
$instance->setOption(Memcached::OPT_PREFIX_KEY, $persistent_id);
$instance->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true); // advisable option

// Add servers if no connections listed. Get server set by $persistent_id or use default set.
// In a production environment with multiple server sets you may wish to prevent typos from silently adding data
// to the default pool, in which case return an error on no match instead of defaulting
if( !count($instance->getServerList()) ) {
$servers = array_key_exists($persistent_id, $GLOBALS['memcached-sets'])
?
$GLOBALS['memcached-sets'][$persistent_id]
:
$GLOBALS['memcached-sets'][DEFAULT_MEMCACHED_SET];
$instance->addServers($servers);
}

$memcached_instances[$persistent_id] = $instance;
}
return
$instance;
}

// simple example
mcache()->set('foo', 'bar');
mcache('myset')->set('foo', 'baz');

var_dump(mcache()->get('foo'), mcache('myset')->get('foo'));

?>

string(3) "bar"
string(3) "baz"

Just remember to keep your $persistent_ids short as they infringe upon your maximum key length. Happy coding! :)

<< Back to user notes page

To Top