Longhorn PHP 2023 - Call for Papers


(PECL memcached >= 0.1.0)

Memcached::getПолучение записи


public Memcached::get(string $key, callable $cache_cb = ?, int $flags = ?): mixed

Memcached::get() возвращает запись, которая ранее была сохранена под ключом key. Если элемент не найден и для параметра flags задано Memcached::GET_EXTENDED, то она также возвратит значение токена CAS для этой записи. Обратитесь к документации по Memcached::cas() для получения информации об использовании CAS токена. Чтение при помощи кеширующих callback-функций может быть использовано с помощью параметра cache_cb.

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


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


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


Флаги, определяющие возвращаемый результат. Если задана константа Memcached::GET_EXTENDED, функция также возвратит токен CAS.

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

Возвращает значение хранимое в кеше или false в противном случае. Если в flags установлена константа, Memcached::GET_EXTENDED, возвращается массив, содержащий значение и токен CAS вместо единственного значения. Метод Memcached::getResultCode() возвращает Memcached::RES_NOTFOUND если переданный ключ не существует.

Список изменений

Версия Описание
PECL memcached 3.0.0 Удалён параметр &cas_token. Вместо него добавлен параметр 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 https://github.com/php-memcached-dev/php-memcached/pull/214 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
13 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 :)
12 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