(PECL memcached >= 0.1.0)
Memcached::get — Retrieve an item
Memcached::get() returns the item that was previously
stored under the key
. If the item is found and
the get_flags
is given Memcached::GET_EXTENDED
,
it will also return the CAS token value for the item. See
Memcached::cas() for how to use CAS tokens.
Read-through caching callback may be
specified via cache_cb
parameter.
key
The key of the item to retrieve.
cache_cb
Read-through caching callback or null
.
get_flags
Flags to control the returned result. When Memcached::GET_EXTENDED
is given, the function will also return the CAS token.
Returns the value stored in the cache or false
otherwise.
If the get_flags
is set to Memcached::GET_EXTENDED
,
an array containing the value and the CAS token is returned instead of only the value.
The Memcached::getResultCode() will return
Memcached::RES_NOTFOUND
if the key does not exist.
Version | Description |
---|---|
PECL memcached 3.0.0 |
The &cas_token parameter was removed.
Instead get_flags was added and when it is given the value of Memcached::GET_EXTENDED it will ensure the CAS token to be fetched.
|
Example #1 Memcached::get() example #1
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
$m->set('foo', 100);
var_dump($m->get('foo'));
?>
The above example will output:
int(100)
Example #2 Memcached::get() example #2
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
if (!($ip = $m->get('ip_block'))) {
if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
$ip = array();
$m->set('ip_block', $ip);
} else {
/* log error */
/* ... */
}
}
?>
As of some version of php7 (i was not able to determine which exactly).
The $cas_token is no longer valid argument. It has been removed in favor of flags argument, as it appears to be causing issues when subclassing the Memcached class.
See https://github.com/php-memcached-dev/php-memcached/pull/214 for more details.
Basically you need to
<?php
function memcacheGet($key, $cb = null, &$cas = null) {
$m = memcacheGetObject();
if(empty($m))
return false;
if(defined('Memcached::GET_EXTENDED')) {
//Incompatible change in php7, took me 2 hours to figure this out, grrr
$_o = $m->get($key, $cb, Memcached::GET_EXTENDED);
$o = $_o['value'];
$cas = $_o['cas'];
} else {
$o = $m->get($key, $cb, $cas);
}
return $o;
}
?>
This method also returns false in case you set the value to false, so in order to have a proper fault mechanism in place you need to check the result code to be certain that a key really does not exist in memcached.
<?php
$Memcached = new Memcached();
$Memcached->addServer('localhost', 11211);
$Memcached->set('key', false);
var_dump($Memcached->get('key')); // boolean false
var_dump($Memcached->getResultCode()); // int 0 which is Memcached::RES_SUCCESS
?>
Or just make sure the values are not false :)
Note that this function can return NULL as FALSE, so don't make checks with === FALSE as with the old Memcache class, because it won't work. :O
Use the not (!) operator and check the result code with getResultCode() as mentioned in the documentation :)