Сессия VS Файл VS Memcache для кэша в PHP?

У меня есть социальная сеть

Я хочу, чтобы вы делали друг корм, на стене, как бы вы его ни называли, он будет показывать такие вещи, как сообщение о статусе пользователя (сообщения типа Twitter), он отобразит несколько разных элементов, но для начала это будет просто статус друга и возможно, сообщение в блоге.

В основном вы увидите только контент, опубликованный с идентификатором пользователя, который находится в вашем списке друзей.

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

В настоящее время для создания этого фида я должен

  1. Получить список друзей ID на большой таблице друзей

  2. Получите данные потока из идентификаторов друзей из приведенного выше результата

  3. ПРИСОЕДИНИТЕСЬ к таблице пользователя, чтобы получить URL-адрес и имя пользователя издателя

  4. Затем СОЕДИНЯЙТЕСЬ в таблицу комментариев, чтобы получать комментарии, размещенные в фидах

Это одна большая задача для создания этого фида

До сих пор у меня есть 3 идеи, вот где может помочь ваша помощь.

Вариант Memcache:

  1. Используйте memcache и кешируйте список друзей пользователей в качестве массива, когда пользователь входит в этот сайт, а также когда пользователь одобряет новый запрос друга для добавления друга в список, он перестраивает его.
  2. В дополнение к тому, что я просто получаю друзей, я мог бы сохранить там URL-адрес и имя пользователя друзей, это ускорит все, устраняя этот запрос при создании корма друга.

Кэш файла Опция:

  1. Сделайте то же самое, что и параметр memcache, но сохраните эти данные как массив в кеш-файле вместо памяти, затем включите этот файл кэша на страницу.

  2. Я не уверен, что является лучшим методом для производительности. Я понимаю, что memcache хранит все в памяти, поэтому друзья, у которых есть 20 000 друзей, которые могут использовать много памяти и кеш-файл, будут помещать их только в память, когда пользователям это нужно, если я верный. Также, если я сделал метод файла, когда пользователь выходит из сайта, я бы удалил туда файл кеша, поэтому папка с кешем никогда не будет слишком большой из файлов

Кэш сеанса:

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

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

Solutions Collecting From Web of "Сессия VS Файл VS Memcache для кэша в PHP?"

Memcache – ваш лучший выбор по многим причинам:

  1. Это ДЕЙСТВИТЕЛЬНО быстро – все в памяти, и оно очень оптимизировано для ситуаций, подобных вашим (и кэширование вообще 🙂
  2. Он распространяется. Это означает, что если у вас несколько серверов веб-приложений или приложений, они могут получить доступ к одному и тому же кешу
  3. Вы можете объединить несколько серверов для memcache. Если у вас несколько серверов, которые недостаточно используются (или несколько выделенных серверов кеша), вы можете объединить их все вместе в один большой кеш
  4. Это супермасштабируемое (по причинам, упомянутым выше)
  5. У него отличная поддержка PHP. Пакет PECL для memcache был недавно обновлен с большим количеством новой доброты
  6. Вы даже можете хранить свои пользовательские сессии в memcache – просто настройте его в файле php.ini. Это намного быстрее, чем хранение сессий в базах данных и позволяет вашим сеансам сохраняться на нескольких веб-хостах (если вы находитесь в ситуации с балансировкой нагрузки) … это также даст вашему сайту немного повышения производительности, поскольку нет необходимости чтобы попасть в файловую систему / базу данных для информации о сеансе по каждому запросу.

… и многое другое;)

Что касается некоторых из ваших опасений относительно объема памяти отдельных кешированных предметов, у вас есть несколько вариантов. Моя первоначальная мысль состоит в том, чтобы просто дать ему завихрение, посмотреть, насколько сильно эти элементы кэша действительно получают (вы можете найти несколько вещей с открытым исходным кодом для мониторинга фактического использования кеша, например, кактусов). Думаю, они будут меньше, чем вы думаете.

Если это не так, я бы предложил пересмотреть свою стратегию кэша до того, что вы на самом деле кешируете, как долго и т. Д. Возможно, вы могли бы создать фид из нескольких вещей, уже находящихся в кеше (например, кешировать отдельные пользовательские данные, а затем создать фид для человека из всех этих отдельных элементов в кеше). На этом фронте есть много хороших статей, просто найдите их!

Максимальный размер объекта по умолчанию, допустимый в Memcache, равен 1 МБ.

@jsaondavis: «данные сеанса сохраняются в файл».

Ваше утверждение выше неверно. Сессия может быть настроена для хранения в базе данных. По умолчанию session hadndler – это файл.

Redis будет хорошим решением:

Вот поток на Redis Vs. Memcached. Похоже, что у Redis есть 512mb-хранилище вместо 1mb-предела … QUITE немного отличается 🙂

Memcached против Redis?