Note that you *cannot* use spaces in the key name! This is because the ASCII protocol uses space as a parameter delimiter, so you'll break things. And it won't give you sensible errors!
Memcache::get
(PECL memcache >= 0.2.0)
Memcache::get — サーバから項目を取得する
説明
string Memcache::get
( string $key
[, int &$flags
] )
array Memcache::get
( array $keys
[, array &$flags
] )
Memcache::get() は、その時点でサーバ上に key というキーのデータが存在する場合に、 格納されているデータを返します。
Memcache::get() にキーの配列を渡すことにより、 値の配列を取得することができます。この配列には、サーバ上で見つかった キーと値のペアのみが含まれます。
パラメータ
- key
-
取得したいキー (あるいはキーの配列)。
- flags
-
存在した場合は、値とともに取得したフラグをここに書き込みます。 これらのフラグは、たとえば Memcache::set() に渡すものと同じです。int の最下位バイトは pecl/memcache で内部的に使用するために予約されています (たとえば圧縮やシリアライズに関する状態を表します)。
返り値
key に関連付けられた文字列を返します。 取得に失敗したり key が見つからなかったりした 場合には FALSE を返します。
例
例1 Memcache::get() の例
<?php
/* 手続き型の API */
$memcache_obj = memcache_connect('memcache_host', 11211);
$var = memcache_get($memcache_obj, 'some_key');
/* オブジェクト指向の API */
$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host', 11211);
$var = $memcache_obj->get('some_key');
/*
キーの配列をパラメータとして使用することもできます。
もしキーに対応する項目がサーバ上で見つからなければ、
結果の配列の中にはそのキーは含まれません。
*/
/* 手続き型の API */
$memcache_obj = memcache_connect('memcache_host', 11211);
$var = memcache_get($memcache_obj, Array('some_key', 'another_key'));
/* オブジェクト指向の API */
$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host', 11211);
$var = $memcache_obj->get(Array('some_key', 'second_key'));
?>
Memcache::get
Wade
16-Dec-2008 02:34
16-Dec-2008 02:34
nate
15-Oct-2008 12:18
15-Oct-2008 12:18
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'))
);
?>
marko at nastja dot com
30-Jul-2008 09:07
30-Jul-2008 09:07
It looks like memcache take only first 256 characters. So if you want to cache some (large) queries do md5 or similar before caching.
jakub dot lopuszanski at nasza-klasa dot pl
07-Jul-2008 11:39
07-Jul-2008 11:39
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.
