PHP Conference Japan 2024

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 条注释

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;
}
?>
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')); // 布尔值 false
var_dump($Memcached->getResultCode()); // 整数 0,表示 Memcached::RES_SUCCESS
?>

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

使用非 (!) 运算符,并根据文档中提到的内容使用 getResultCode() 检查结果代码 :)
To Top