函式:Memcached::getDelayed()
適用版本:PHP 5 >= 5.3.0, PHP 7
用法:Memcached::getDelayed() 函式用於從Memcached伺服器非同步獲取多個鍵對應的值。與 Memcached::get() 不同的是,getDelayed() 函式不會阻塞指令碼執行,而是立即返回一個結果集物件,可以透過該物件獲取非同步獲取的資料。
語法:public Memcached::getDelayed ( array $keys [, bool &$cas_token [, callable $value_cb [, int $flags ]]] ) : bool
引數:
- keys: 必需,一個包含多個鍵名的陣列,用於指定要從Memcached伺服器獲取值的鍵。
- cas_token: 可選,一個引用型別的變數,用於儲存每個鍵對應的CAS標記(用於樂觀鎖機制)。
- value_cb: 可選,一個回撥函式,用於處理獲取到的每個鍵對應的值。該函式接受兩個引數:鍵名和值,可以在該函式中對值進行處理。
- flags: 可選,一個整數,用於指定一些選項。
返回值:如果成功啟動了非同步獲取操作,則返回 true;否則返回 false。
示例:
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);
$keys = array('key1', 'key2', 'key3');
$casTokens = array();
$result = $memcached->getDelayed($keys, $casTokens);
if ($result) {
// 非同步獲取操作已經啟動,可以進行其他操作
// 處理獲取到的每個鍵對應的值
$valueCallback = function ($key, $value) {
echo "Key: $key, Value: $value\n";
};
// 獲取非同步獲取操作的結果集物件
$resultObj = $memcached->fetchAll();
// 遍歷結果集物件,處理每個鍵對應的值
while ($resultObj->next()) {
$resultObj->get($key, $value);
$valueCallback($key, $value);
}
} else {
echo "Failed to start async get operation\n";
}
以上示例中,我們首先例項化了一個 Memcached 物件,並新增了一個 Memcached 伺服器。然後,我們定義了要非同步獲取的鍵名陣列 $keys
,並將其傳遞給 getDelayed()
函式。函式返回 true 表示非同步獲取操作已經啟動,我們可以繼續執行其他操作。
在示例中,我們定義了一個回撥函式 $valueCallback
,用於處理獲取到的每個鍵對應的值。然後,我們透過呼叫 $memcached->fetchAll()
方法獲取非同步獲取操作的結果集物件 $resultObj
。
接下來,我們使用 while
迴圈遍歷結果集物件 $resultObj
,並透過呼叫 $resultObj->get()
方法獲取每個鍵對應的值。然後,我們呼叫回撥函式 $valueCallback
處理獲取到的鍵值對。
注意:在實際使用中,我們可以根據需求對回撥函式進行自定義,以滿足具體的業務邏輯。