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 :)
Memcached::get
(PECL memcached >= 0.1.0)
Memcached::get — アイテムを取得する
説明
Memcached::get() は、キー
key に格納されたアイテムを返します。
アイテムが存在して cas_token が指定されていた場合には、
そのアイテムの CAS トークンの値がそこに格納されます。CAS トークンの使用法は
Memcached::cas() を参照ください。Read-through キャッシュコールバック
は cache_cb パラメータで指定します。
パラメータ
-
key -
取得したいアイテムのキー。
-
cache_cb -
Read-through キャッシュコールバック、あるいは
NULL。 -
cas_token -
CAS トークンを格納する変数。
返り値
キャッシュに格納された値、あるいは FALSE を返します。
キーが存在しない場合、
Memcached::getResultCode() は
Memcached::RES_NOTFOUND を返します。
例
例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 {
/* エラーをログに記録します */
/* ... */
}
}
?>
参考
- Memcached::getByKey() - 指定したサーバーからアイテムを取得する
- Memcached::getMulti() - 複数のアイテムを取得する
- Memcached::getDelayed() - 複数のアイテムを要求する
miha at hribar dot info ¶
3 years ago
denis_truffaut[A-T]hotmail[D-O-T]com ¶
2 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 :)
