Я кэширую твиты на своем сайте (с истечением 30 минут). Когда кеш пуст, первый пользователь, который его обнаружит, перепишет его.
Однако в то время API Twitter может вернуть 200. В этом случае я хотел бы продлить предыдущие данные еще на 30 минут. Но предыдущие данные уже будут потеряны.
Поэтому вместо этого я хотел бы заглянуть в переполнение кэша, скажем, за 5 минут до истечения срока, чтобы я не терял ни одной даты.
Итак, как узнать время истечения срока действия элемента при использовании memcache php :: get ()?
Кроме того, есть ли лучший способ сделать это?
В таком случае, разве это не лучшая логика?
Суть в том, что только замените данные чем-то новым, если у вас есть это, не позволяйте старым данным автоматически отбрасываться.
не храните критические данные в memcached. он ничего не гарантирует.
если вам всегда нужно получить «последний хороший» кеш – вам нужно хранить данные в любом постоянном хранилище, таком как база данных или плоский файл.
в этом случае, если ничего не найдено в кеше – вы делаете запрос twitter api. если он терпит неудачу – вы читаете данные из постоянной. и по другому запросу http вы сделаете одну итерацию еще раз.
или вы можете перенести данные из постоянной в memcache с довольно продолжительным временем жизни. несколько минут, например (1-5), чтобы время в twitter серверов становилось здоровым. и после истечения срока действия повторите запрос.
Когда вы помещаете свои данные в memcache, вы также устанавливаете, как долго действителен кеш. Поэтому теоретически вы также можете указать время создания кеша и / или время истечения срока действия кеша. Позже после извлечения из кеша вы всегда можете проверить, сколько времени осталось до истечения срока действия кеша, и решить, что вы хотите сделать.
Но позволить кешу повторно заселяться при посещении пользователя в какой-то момент может быть рискованным – скажем, если вы хотите повторно заполнить кеш, когда он достигнет ~ 5 минут до истечения срока действия, – и внезапно не будет посетителей за последние 6 минут до кэша истекает – тогда кеш по-прежнему истекает, и никто не заставит его повторно заселить. Если вы хотите быть уверенным, что запись в кеше существует, вам нужно периодически проверять проверку – например, создание cronjob, который выполняет кеширование и заполнение.