PHP Conference Nagoya 2025

Memcached::get

(PECL memcached >= 0.1.0)

Memcached::getアイテムを取得する

説明

public Memcached::get(string $key, ?callable $cache_cb = null, int $get_flags = 0): mixed

Memcached::get() は、キー key に格納されたアイテムを返します。 アイテムが存在して get_flagsMemcached::GET_EXTENDED が指定されていた場合には、 そのアイテムの CAS トークンの値も返します。CAS トークンの使用法は Memcached::cas() を参照ください。Read-through キャッシュコールバックcache_cb パラメータで指定します。

パラメータ

key

取得したいアイテムのキー。

cache_cb

Read-through キャッシュコールバック、あるいは null

get_flags

返される結果を制御するフラグ。Memcached::GET_EXTENDED を指定すると、CAS トークンも返すようになります。

戻り値

キャッシュに格納された値、あるいは false を返します。 get_flagsMemcached::GET_EXTENDED が設定されている場合は、キャッシュに格納された値と CAS トークンを含む配列を返します。 キーが存在しない場合、 Memcached::getResultCode()Memcached::RES_NOTFOUND を返します。

変更履歴

バージョン 説明
PECL memcached 3.0.0 &cas_token パラメータが削除されました。 その代わりに新たに get_flags パラメータが追加され、ここに Memcached::GET_EXTENDED を指定すると、CAS トークンも含めて取得するようになります。

例1 Memcached::get() の例 #1

<?php
$m
= new Memcached();
$m->addServer('localhost', 11211);

$m->set('foo', 100);
var_dump($m->get('foo'));
?>

上の例の出力は以下となります。

int(100)

例2 Memcached::get() の例 #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 {
/* エラーをログに記録します */
/* ... */
}
}
?>

参考

add a note

User Contributed Notes 3 notes

up
12
letynsoft at gmail dot com
7 years ago
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;
}
?>
up
10
miha at hribar dot info
15 years ago
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 :)
up
-2
denis_truffaut[A-T]hotmail[D-O-T]com
13 years ago
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 :)
To Top