Несколько вопросов о PHP memcache - PullRequest
3 голосов
/ 01 августа 2009

1)
Я понимаю, что могу назвать это

$memcache_obj = memcache_connect('memcache_host', 11211);

в заголовочных файлах моего сайта без влияния на страницы, которые не используют memcache но как насчет этого

$memcache->connect('127.0.0.1', 11211);

Должно ли это вызываться на постраничной основе?


2)
Что делать, если на сервере недостаточно памяти для записи новых кешей, а memcache пытается сохранить кеш?


3)
Я знаю, что ключи могут иметь до 30 дней, Есть ли способ удалить все ключи из памяти, особенно это полезно для фазы тестирования?

4)
Также этот код, первая переменная соединяется, поэтому, например, если у меня есть 5 разделов на странице, которые добавляют / обновляют / удаляют из memcache, мне нужно запускать это соединение каждый раз, или можно подключиться 1 раз и сделать все на страницу загрузки?

memcache_set($memcache_obj, 'var_key', 'some variable', 0, 30)

5) Есть ли какая-либо функция или что-нибудь, что показывает, например, сколько памяти доступно и используется на странице php?

Ответы [ 3 ]

8 голосов
/ 01 августа 2009
  1. да, сетевые вызовы не выполняются до попытки извлечения, удаления и т. Д., Поэтому не мешает выделять объект в случае необходимости. (РЕДАКТИРОВАТЬ: я думал о расширении «memcached» здесь, оказывается, что расширение «memcache» фактически открывает соединение с сервером memcache, хотя попадание ничтожно мало)

  2. memcache удалит наименее используемые элементы, чтобы попытаться освободить место для нового объекта

  3. $ memcache_obj-> заподлицо ();

  4. соединение должно происходить только один раз за запуск скрипта, проще всего разместить соединение вверху вашей страницы или в конструкторе класса

  5. $ memcache_obj-> getStats () http://www.php.net/manual/en/function.memcache-getstats.php

3 голосов
/ 01 августа 2009

Джейсон очень хорошо ответил на ваши вопросы, но я подумал, что добавлю несколько заметок:

2) Обратите внимание, что если вы попытаетесь сохранить более 1 МБ (по умолчанию) в ключе, расширение memcache вернет значение FALSE. Он также вернет FALSE, если по какой-либо причине не может написать ключ.

3) Ключи могут иметь срок службы> 30 дней (TTL). Просто добавьте TTL к текущему времени и используйте его в качестве TTL. Используя ваш пример вызова, это может быть что-то вроде этого (закодировано для ясности):

$ttl = 60*60*24*60; // 60 days
$newTTL = time()+$ttl;
memcache_set($memcache_obj, 'cache_key', 'some data', 0, $newTTL)

5) Если вы говорите о памяти PHP, то memory_get_usage() даст вам то, что вы хотите. Память кэш-памяти немного сложнее, но использование вызова getStats() направит вас в правильном направлении.

1 голос
/ 01 августа 2009
  1. http://uk3.php.net/manual/en/function.memcache-connect.php предполагает, что memcache_connect () аналогична созданию экземпляра Memcache и вызову connect () для него
  2. http://code.google.com/p/memcached/wiki/FAQ#What_is_memcached%27s_cache? говорит: «Если серверу не хватает памяти, сначала заменяются просроченные плиты, затем идут самые старые неиспользуемые плиты».
  3. Перезапустите экземпляр memcached или вызовите flush , что сделает недействительными все элементы кэша на сервере
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...