Проверьте, существует ли ключ в Кэш-памяти

Как я регистрируюсь в PHP, если значение хранится в Кэш-памяти, не выбирая его? Мне не нравится выбирать его, потому что значения, которые я установил, составляют весь 1 МБ в размере и после того, как я выбираю его, мне не нравится он, таким образом, я трачу впустую ресурсы. Я использую это в сценарии, который проверяет, кэшируются ли определенные ключи в кэш-памяти, и в противном случае она читает их из медленного источника данных и устанавливает их в кэш-памяти.

Править: Что, если я использую Memcached::append добавлять NULL к ключу я проверяю? Возвраты TRUE на успехе или FALSE при отказе. Memcached::getResultCode возвратится Memcached::RES_NOTSTORED если ключ не существует. Таким образом, я проверяю, существует ли ключ, и он должен поместить ключ сверх права списка LRU?

Спасибо.

18
задан NHG 9 October 2015 в 10:31
поделиться

4 ответа

Не уверен, что это поможет вам, но вы можете использовать

Memcache::add  (  string $key  ,  mixed $var)

. Он вернет false, если ключ уже существует.

В случае, если возвращается истина, вы можете использовать

Memcache::delete  (  string $key)

для удаления только что установленного ключа. Таким образом, вам не нужно будет получать данные.

6
ответ дан 30 November 2019 в 08:43
поделиться

По сути, вы хотите заполнить memcached своими данными, верно?

Дело в том, что спрашивать, есть ли там ключ, не получая значения, не очень полезно. См. Следующий сценарий:

Вы спрашиваете, существует ли ключ, и он существует. Сразу после вашего запроса данные ключа удаляются из кеша. В то время как ваш ответ возвращается, говоря, что дата есть, на самом деле данных нет. Итак, вы потеряли время, спрашивая, потому что ответ отличается от реальности.

Думаю, вы хотите спросить, существует ли ключ, а затем, если его нет, заполните его своими данными. Почему бы вам не заполнить все данные напрямую? Кстати, считали ли вы, что пока вы заполняете memcached данными, вы можете удалить ключи, которые вы только что вставили ранее?

3
ответ дан 30 November 2019 в 08:43
поделиться

Я решил эту проблему с помощью Memcached :: append. Я пытаюсь добавить значение NULL, и если оно возвращает TRUE, это означает, что ключ существует. Если он возвращает FALSE, это означает, что ключ не существует. Если ключ существует, он также будет помещен в начало списка LRU.

3
ответ дан 30 November 2019 в 08:43
поделиться

Это не имеет смысла с точки зрения Memcached. Если вы хотите избежать медленного источника данных (я полагаю, из-за запланированного задания?), Сохраните данные в более быстром, но все же стабильном источнике данных (например, в файле) в запланированном задании. Когда вам нужны данные, попробуйте сначала прочитать из Memcached, а если это не удастся, прочтите файл и сохраните его в Memcached.

Memcached не может дать вам хороший ответ, поскольку пакет pakore уже ответил. Архитектура не предназначена для использования в качестве стабильного источника данных.

0
ответ дан 30 November 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: