2024 PHP Conference Japan

Memcached::get

(PECL memcached >= 0.1.0)

Memcached::get擷取項目

說明

公開 Memcached::get(字串 $key, ?可呼叫 $cache_cb = null, 整數 $get_flags = 0): 混合

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')); // boolean false
var_dump($Memcached->getResultCode()); // int 0,即 Memcached::RES_SUCCESS
?>

或者確保值不是 false :)
denis_truffaut[A-T]hotmail[D-O-T]com
13 年前
請注意,此函式可能會將 NULL 作為 FALSE 返回,因此不要像舊的 Memcache 類別那樣使用 === FALSE 進行檢查,因為它將無法正常運作。 :O

請使用 not (!) 運算子,並使用 getResultCode() 檢查結果代碼,如文件中所述 :)
To Top