Получить время истечения срока действия элемента memcache в php?

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

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

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

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

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

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

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

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

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

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

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

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

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

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