memcached не хранит массив сложных элементов с конкретными ключами - PullRequest
0 голосов
/ 11 февраля 2019

Каким-то образом я не могу сохранить массив сложных элементов, если поставить user_ в качестве префикса для ключа

Код php

$this->skills = [
    'defensiv' => DefensivSkill::getAllUserSkills($this),
    'offensiv' => OffensivSkill::getAllUserSkills($this),
    'spezial'  => SpezialSkill::getAllUserSkills($this),
    'pve'      => PVESkill::getAllUserSkills($this)
];

//is not stored
$_MEMCACHED->set('user_'.$this->getUserId().'_skills', $this->skills);

//is stored
$_MEMCACHED->set($this->getUserId().'_skills', $this->skills);

После этого я вызываю getAllKeys ()и проверь, сохранено ли оно ...

Я думал о длине ключа, но это не проблема.После проверки длина ключа составляет 30 символов, но у меня уже есть ключи длиной 39 символов.

$_MEMCACHED = new Memcached();
$_MEMCACHED->addServer('localhost', 11212);
$_MEMCACHED->setOption(Memcached::OPT_PREFIX_KEY, 'hogsmeade_');
$_MEMCACHED->setOption(Memcached::OPT_SERIALIZER,  Memcached::SERIALIZER_IGBINARY);

Это мой соединитель, сервер MemCached работает с общим ограничением 4 ГБ и ограничением элемента 256 МБ.Классы объекта реализуют сериализуемые.memcached скомпилирован с поддержкой igbinary

Memcached v1.5.12 php-memcached v3.0.3 lib_memcached 1.0.18

Сериализованный массив $this->skills имеет длину ~ 4500 символов (var_dump())

Это работает - не работает, только если я запускаю ключ с user_

$_MEMCACHED->set('cache_user_'.$this->getUserId().'_skills', $this->skills);

Я также расширил memcached для отслеживания, если я удалю его где-нибудь

class MyMemcached extends Memcached
{
public function delete($key, $time = 0)
{
    file_put_contents(ROOT.'/memcache.log', 'DELETE '.$key, FILE_APPEND);
    parent::delete($key, $time); // TODO: Change the autogenerated stub
}

public function deleteMulti(array $keys, $time = 0)
{
    file_put_contents(ROOT.'/memcache.log', 'DELETE '.json_encode($keys), FILE_APPEND);
    parent::deleteMulti($keys, $time); // TODO: Change the autogenerated stub
}
}

, но я не

Для обоих установленных действий код УСПЕХА возвращается после набора

$_MEMCACHED->set('user_'.$this->getUserId().'_skills', $this->skills); 
$_MEMCACHED->get('user_'.$this->getUserId().'_skills');
// works if I call it in the same execution
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...