Я пытаюсь добавить некоторую скорость в проект, над которым я работаю, используя memcache. Однако у меня возникла проблема со следующими
public function sql_query($query){ $memcache = new Memcache; $memcache->connect('localhost', 11211) or die ("Could not connect"); $memkey = md5($query); $get_result = $memcache->get($memkey); if ($get_result){ return $get_result; } else { $q = $this->mysqli->query($query); $memcache->set($memkey, $q, false, 120) or die ("Failed to save data at the server"); if ($this->mysqli->error){ App::Error($this->mysqli->error); } return $q; } }
Это, конечно, что-то помещает в memcached, но я получаю эту ошибку, когда вытаскиваю ее обратно и использую ее так, как если бы она не была из кеша.
"Warning: mysqli_result::fetch_assoc(): Couldn't fetch mysqli_result"
Я что-то упускаю? Я уверен, что раньше я использовал memcache без каких-либо проблем.
Вы не можете хранить все типы данных в memcached (и других хранилищах данных), которые чаще всего не работают, это ресурсы Docs , например, ссылка на базу данных или идентификатор результата.
Вы сохранили такое значение, и по другому запросу вы вытащили его снова. Но поскольку база данных уже находится в другом состоянии, этот ресурс больше не работает. Тогда вы получите ошибку.
Вместо этого вам нужно сохранить данные результата из запроса, это статические данные, которые вы можете поместить в memcache.