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_flags 被设置为 Memcached::GET_EXTENDED,它还会返回项目的 CAS 令牌值。有关如何使用 CAS 令牌,请参见 Memcached::cas()。可以通过 cache_cb 参数指定 读穿缓存回调

参数

key

要检索的项目的键。

cache_cb

读穿缓存回调或 null

get_flags

控制返回结果的标志。当设置为 Memcached::GET_EXTENDED 时,该函数还会返回 CAS 令牌。

返回值

返回存储在缓存中的值,否则返回 false。如果 get_flags 设置为 Memcached::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 {
/* 记录错误 */
/* ... */
}
}
?>

参见

添加笔记

用户贡献的笔记 3 notes

12
letynsoft at gmail dot com
7 年前
从 php7 的某个版本开始(我无法确定具体是哪个版本)。
$cas_token 现在不再是有效的参数。它已被删除,取而代之的是 flags 参数,因为它在对 Memcached 类进行子类化时似乎会导致问题。

有关更多详细信息,请参见 https://github.com/php-memcached-dev/php-memcached/pull/214

基本上你需要
<?php
function memcacheGet($key, $cb = null, &$cas = null) {
$m = memcacheGetObject();
if(empty(
$m))
return
false;
if(
defined('Memcached::GET_EXTENDED')) {
// PHP7 中的不兼容更改,我花了 2 个小时才弄明白,真是太糟糕了
$_o = $m->get($key, $cb, Memcached::GET_EXTENDED);
$o = $_o['value'];
$cas = $_o['cas'];
} else {
$o = $m->get($key, $cb, $cas);
}
return
$o;
}
?>
10
miha at hribar dot info
15 年前
如果将值设置为 false,此方法也会返回 false,因此为了拥有适当的故障机制,您需要检查结果代码以确保键确实不存在于 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
?>

或者只需确保值不为 false :)
-2
denis_truffaut[A-T]hotmail[D-O-T]com
13 年前
请注意,此函数可能会将 NULL 返回为 FALSE,因此不要像使用旧的 Memcache 类一样使用 === FALSE 进行检查,因为它不起作用。:O

使用非 (!) 运算符并使用 getResultCode() 检查结果代码,如文档中所述 :)
To Top