Каким-то образом я не могу сохранить массив сложных элементов, если поставить 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