Получить срок действия элемента memcache в php? - PullRequest
4 голосов
/ 15 марта 2010

Я кеширую твиты на своем сайте (с истечением 30 минут). Когда кэш будет пуст, первый пользователь, который узнает, заполнит его.

Однако в то время API Twitter может вернуть 200. В этом случае я бы хотел продлить предыдущие данные еще на 30 минут. Но предыдущие данные уже будут потеряны.

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

Итак, как узнать время истечения предмета при использовании memcache :: get () в php?

Кроме того, есть ли лучший способ сделать это?

Ответы [ 3 ]

5 голосов
/ 15 марта 2010

В таком случае, разве это не лучшая логика?

  • Если кеш старше 30 минут, попробуйте вытащить из Twitter
  • Если новые данные были успешно получены, перезаписать кэш
  • Кэшировать данные на неопределенное время (или намного дольше, чем вы планируете кэшировать в любом случае)
  • Обратите внимание, что в последний раз кэш обновлялся (текущее время) отдельным ключом
  • Промыть, повторить

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

1 голос
/ 15 марта 2010

не хранить критические данные в memcached. это ничего не гарантирует.

если вам всегда нужно получить «последний хороший» кеш - вам нужно хранить данные в любом постоянном хранилище, например, в базе данных или в простом файле.

в этом случае, если ничего не найдено в кеше - вы делаете твиттер-запрос API. если это не удается - вы читаете данные из персистентного. и по другому запросу http вы сделаете ту же итерацию еще раз.

или вы можете поместить данные из постоянного в memcache с довольно коротким временем жизни. например, несколько минут (1-5), чтобы дать серверам твиттера время поправиться. и после истечения срока - повторите запрос.

0 голосов
/ 15 марта 2010

Когда вы помещаете свои данные в memcache - вы также указываете, как долго будет действовать кеш. Таким образом, теоретически вы также можете указать время создания кэша и / или когда срок его действия истечет. Позже после извлечения из кеша вы всегда можете проверить, сколько времени осталось до истечения срока действия кеша, и решить, что вы хотите сделать.

Но разрешить повторное заполнение кэша при посещении пользователя в какой-то момент все еще может быть рискованным - скажем, если вы хотите заполнить кэш, когда он достигнет ~ 5 минут до истечения срока действия - и вдруг посетителей за последние 6 дней не будет минут до истечения срока действия кэша - тогда срок действия кэша все еще истекает, и никто не будет вызывать его повторное заполнение. Если вы хотите всегда быть уверенным, что запись в кеше существует, вам необходимо периодически выполнять проверки, например, делать cronjob, который выполняет проверки и заполнение кеша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...