note 104269 added to memcached.construct
| From: | clancyhoodatgmaildotcom at osu1 dot php dot net | Date: | Sat, 04 Jun 2011 20:32:40 +0000 |
| Subject: | note 104269 added to memcached.construct | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-180261@lists.php.net to get a copy of this message | ||
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! :)
----
Server IP: 87.124.126.138
Probable Submitter: 87.106.252.91 (proxied: 87.106.252.91)
----
Manual Page -- http://www.php.net/manual/en/memcached.construct.php
Edit -- https://master.php.net/note/edit/104269
Del: integrated -- https://master.php.net/note/delete/104269/integrated
Del: useless -- https://master.php.net/note/delete/104269/useless
Del: bad code -- https://master.php.net/note/delete/104269/bad+code
Del: spam -- https://master.php.net/note/delete/104269/spam
Del: non-english -- https://master.php.net/note/delete/104269/non-english
Del: in docs -- https://master.php.net/note/delete/104269/in+docs
Del: other reasons-- https://master.php.net/note/delete/104269
Reject -- https://master.php.net/note/reject/104269
Search -- https://master.php.net/manage/user-notes.php