PHPerKaigi 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.

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


Ключ получаемой записи.


Функция обратного вызова для кешируемого чтения или null.


Флаги, определяющие возвращаемый результат. Если задана константа 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

= 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
6 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