Memcache::get

(PECL memcache >= 0.2.0)

Memcache::getRetrieve item from the server

Описание

string Memcache::get ( string $key [, int &$flags ] )
array Memcache::get ( array $keys [, array &$flags ] )

Memcache::get() returns previously stored data if an item with such key exists on the server at this moment.

You can pass array of keys to Memcache::get() to get array of values. The result array will contain only found key-value pairs.

Список параметров

key

The key or array of keys to fetch.

flags

If present, flags fetched along with the values will be written to this parameter. These flags are the same as the ones given to for example Memcache::set(). The lowest byte of the int is reserved for pecl/memcache internal usage (e.g. to indicate compression and serialization status).

Возвращаемые значения

Returns the string associated with the key or an array of found key-value pairs when key is an array. Returns FALSE on failure, key is not found or key is an empty array.

Примеры

Пример #1 Memcache::get() example

<?php

/* procedural API */
$memcache_obj memcache_connect('memcache_host'11211);
$var memcache_get($memcache_obj'some_key');

/* OO API */
$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host'11211);
$var $memcache_obj->get('some_key');

/* 
You also can use array of keys as a parameter.
If such item wasn't found at the server, the result
array simply will not include such key.
*/

/* procedural API */
$memcache_obj memcache_connect('memcache_host'11211);
$var memcache_get($memcache_obj, Array('some_key''another_key'));

/* OO API */
$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host'11211);
$var $memcache_obj->get(Array('some_key''second_key'));

?>

Коментарии

If deserialization fails for some reason, that is when memcache server returned flag 1 set, but the value was not a correctly serialized PHP data,
then Memcache::get acts in a following way:

If it was called with a single key to retrieve, then a warning is raised, but since it was not actually a bug of a server, the warning says something confusing like "Memcached Server Error: null" and the function returns bool(false).

If it was called by passing an array (even with a single element in it), then the warning is not raised and the resulting array contains a value bool(false).

Since there are some buffer overrun bugs present in Memcached Server, which from time to time cause overwriting of [part of] data and therefore rendering it impossible to deserialize, make sure to check if the result of Memcache::get contains only string, or deserialized structure. If the result is bool,dobule or long, then something went wrong.
2008-07-07 10:39:49
http://php5.kiev.ua/manual/ru/memcache.get.html
Автор:
Be aware that when using the multi-key version, Memcache::get returns bool false if no servers are configured for the pool (and possibly if other errors occur as well while attempting to fetch). Also, Memcache class throws annoying warnings on every get/set/delete-type calls if you have no servers added to the pool.

The following snippet var_dump's bool false, not an empty array like you might expect.

<?php
$cache 
= new Memcache;

// no $cache->addServer calls (for example,
due to temporarily disabling use of cache)

// use @ symbol to ignore warning

var_dump(
    @
$cache->get(array('one''two'))
);
?>
2008-10-14 11:18:17
http://php5.kiev.ua/manual/ru/memcache.get.html
For me it was the case that if such key doesn't exist, null is returned not false.
2010-03-22 16:00:00
http://php5.kiev.ua/manual/ru/memcache.get.html
Автор:
Beware, if there's a backslash present in the key name then the results are unpredictable and random.

I was generating keys like this:

$mc_key = get_called_class(). $_COOKIE['crumb'];

This works fine when get_called_class() returns CLASSNAME.

But then I began using namespaces, and get_class_class() of course returned NAMESPACE\CLASSNAME

Well that backslash sends Memcache into quite the tizzy.
No errors, mind you, just insanity.
2011-02-17 04:46:20
http://php5.kiev.ua/manual/ru/memcache.get.html
$flags stays untouched if $key was not found on the server, it's helpfull to determine if bool(false) was stored:

<?php

$memcache 
= new Memcache();

$memcache->set('test'false); // 
$flags false;
var_dump($memcache->get('test'$flags)); // bool(false)
var_dump($flags); // int(256) - changed to int

$memcache->delete('test');

$flags false;
var_dump($memcache->get('test'$flags)); // bool(false)
var_dump($flags); // bool(false) - untouched

?>
2013-04-27 03:14:37
http://php5.kiev.ua/manual/ru/memcache.get.html
Note that if you include spaces in your keys when saving Data and use array of keys to get the Data, The returned array will replace spaces with underscores in the keys. 

<?php

$memcache 
= new Memcache;
$memcache->connect('localhost');
$memcache->set('my-key''value1'0300);
$memcache->set('key with space''value 2'0300);

print_r($memcache->get(array('my-key''key with space'))); // Array ( [my-key] => value1 [key_with_space] => value 2 )

?>

Memcache replaces spaces with underscores when saving, it does so when doing a get too, but when you do a get with single key (string) you don't notice this as it merely returns the value. But when you do a get for array of keys, you would expect the same keys in the returned array but it replaces spaces by underscores in them.
2013-05-21 09:31:48
http://php5.kiev.ua/manual/ru/memcache.get.html
Signature is not correct.

<?php 
$memcache 
= new Memcache();
$memcache->connect('localhost'11211);
class 
Test { public $property "testvalue"; }
$test = new Test();
$memcache->set("asdf"$test);
var_dump($memcache->get("asdf"));
/* will return the object, not the string:
    class Test#3 (1) {
      public $property =>
      string(9) "testvalue"
    }
*/
?>
2014-01-27 11:19:38
http://php5.kiev.ua/manual/ru/memcache.get.html
Avoid reading too many values from memcahce. Each get() consumes some memory. You should cache the values instead, once they are read. Illustration of bad practice:

<?php   // reading from memcache leaks

   
$m = new Memcache();
   
$m -> connect"localhost""11211" );
   
$m -> add("foo""bar");

    for(;;) { 
// this "endless" loop will finish because it eats up all the memory
       
$res $m -> get("foo");
        print 
memory_get_usage()."\n"// this writes bigger and bigger numbers
   
}
2014-10-07 07:27:55
http://php5.kiev.ua/manual/ru/memcache.get.html

    Поддержать сайт на родительском проекте КГБ