CascadiaPHP 2024


(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. Метод Memcached::cas() описывает, как использовать CAS-токены. Callback-функции кеша со сквозным чтением устанавливают через параметр cache_cb.

Список параметров


Ключ элемента, который требуется получить.


Callback-функция кеширования со сквозным чтением или null.


Флаги для управления результатом, который вернёт метод. Метод также вернёт CAS-токен, если установили константу Memcached::GET_EXTENDED.

Возвращаемые значения

Метод возвращает значение, которое хранится в кеше, иначе 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


= new Memcached();
$m->addServer('localhost', 11211);

$m->set('foo', 100);


Результат выполнения приведённого примера:


Пример #2 Пример использования Memcached::get() #2

= 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 {
/* log error */
/* ... */

Смотрите также

add a note

User Contributed Notes 3 notes

letynsoft at gmail dot com
7 years ago
As of some version of php7 (i was not able to determine which exactly).
The $cas_token is no longer valid argument. It has been removed in favor of flags argument, as it appears to be causing issues when subclassing the Memcached class.

See for more details.

Basically you need to
function memcacheGet($key, $cb = null, &$cas = null) {
$m = memcacheGetObject();
defined('Memcached::GET_EXTENDED')) {
//Incompatible change in php7, took me 2 hours to figure this out, grrr
$_o = $m->get($key, $cb, Memcached::GET_EXTENDED);
$o = $_o['value'];
$cas = $_o['cas'];
} else {
$o = $m->get($key, $cb, $cas);
miha at hribar dot info
14 years ago
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.

= 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 :)
13 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 :)
To Top