Сессия VS Файл VS Memcache для кэша в PHP?
У меня есть социальная сеть
-
Таблица пользователей составляет около 60 000 строк
-
Таблица друзей составляет около 1 миллиона
строки (используемые для определения того, кто является вашим
друг)
Я хочу сделать ссылку для друга, стену, что бы вы ни назвали, она будет показывать такие вещи, как сообщение о статусе пользователя (сообщения типа Twitter), будет показано несколько разных элементов, но для начала это будет просто статус друга и, возможно, сообщение в блоге.
В основном вы увидите только контент, опубликованный с идентификатором пользователя, который находится в вашем списке друзей.
Я пытаюсь найти лучший способ и не очень далеко, но вот моя последняя идея.
В настоящее время для создания этого фида мне нужно
-
Получить список идентификаторов друзей на
таблица большого друга
-
Получить данные потока от друга
ids из приведенного выше результата
-
ПРИСОЕДИНИТЕСЬ к таблице пользователя, чтобы получить
URL и имя пользователя издателей
-
Затем подключитесь к таблице комментариев, чтобы получить
комментарии, отправленные в фид.
Это одна большая задача для создания этого фида
У меня есть 3 идеи до сих пор, вот где может помочь ваша помощь.
Вариант Memcache:
- Использовать memcache и кешировать пользователей
friendlist как массив, когда пользователь
регистрируется на сайте, также когда пользователь
одобряет новый запрос друга на
друга, который будет добавлен в список, он
восстановит там кеш.
- В дополнение к тому, чтобы просто получать туда друзей, я мог бы сохранить там URL-адрес и имя пользователя друзей, это ускорит все, устраняя этот запрос при создании файла-друга.
Файловый кеш-код:
-
Сделайте то же самое, что и параметр memcache
но сохраняет эти данные как массив
к кеш файлу вместо памяти,
затем включите этот файл кеша в
страница.
-
Я не уверен, какой из лучших
метод для работы я понимаю
memcache хранит все в памяти
поэтому друзья, у которых есть 20 000
друзей, которые могли бы использовать много
памяти и кеша файлов
поместить его в память, когда пользователи
это нужно, если я прав. Также, если я
сделал метод файла, когда пользователь
выходит из сайта, я бы удалил
там кеш файл, поэтому папка кэша
никогда не будет слишком большим файлов
Кэш сеанса Опции:
- То же, что и в кэше файлов выше, я просто понял, что данные сеанса сохранены в файл, поэтому это не сделает его способным кэш-памяти?
Пожалуйста, дайте мне ваши мнения или любые советы или информацию, которые у вас есть на этом, поскольку у меня нет большого количества знаний о кешировании, я много читал, но иногда идеи других людей очень помогают.
Ответы
Ответ 1
Memcache - ваш лучший выбор по множеству причин:
- Это ДЕЙСТВИТЕЛЬНО быстро - все в памяти, и оно очень оптимизировано для ситуаций, подобных вашим (и кэширование в целом:)
- Распространяется. Это означает, что если у вас несколько серверов веб-приложений или приложений, они могут получить доступ к одному и тому же кешу
- Вы можете объединить несколько серверов для memcache. Если у вас несколько серверов, которые недостаточно используются (или несколько выделенных кеш-серверов), вы можете объединить их все вместе в один большой кеш
- Это супермасштабируемое (по причинам, упомянутым ранее)
- Он получил отличную поддержку PHP - пакет PECL для memcache был недавно обновлен с большим количеством новой доброты.
- Вы даже можете хранить свои пользовательские сеансы в memcache - просто установите его в файле php.ini. Это намного быстрее, чем хранение сессий в базах данных, и позволяет вашим сеансам сохраняться на нескольких веб-хостах (если вы находитесь в ситуации с балансировкой нагрузки)... это также даст вашему сайту немного повышения производительности, поскольку нет необходимости ударить файловую систему/базу данных для информации о сеансе по каждому запросу.
... и многое другое;)
Что касается некоторых из ваших опасений относительно объема памяти отдельных кешированных элементов, у вас есть несколько вариантов. Моя первоначальная мысль состоит в том, чтобы просто дать ему завихрение, посмотреть, насколько сильно эти элементы кэша действительно получают (вы можете найти несколько вещей с открытым исходным кодом для мониторинга фактического использования кеша, например, кактусов). Я думаю, они будут меньше, чем вы думаете.
Если это не так, я бы предложил пересмотреть свою стратегию кэша, насколько вы на самом деле кешируете, как долго и т.д. Возможно, вы могли бы создать фид из нескольких вещей, уже находящихся в кеше (т.е. данные пользователя, а затем создать фид для человека из всех этих отдельных элементов в кеше). На этом фронте есть много хороших статей, просто найдите их:)
Ответ 2
Максимальный размер объекта по умолчанию, допустимый в Memcache, равен 1 МБ.
@jsaondavis:
"данные сеанса сохраняются в файл".
Ваше утверждение выше неверно. Сессия может быть настроена для хранения в базе данных. По умолчанию сеанс hasndler является файлом.
Ответ 3
Redis будет хорошим решением:
Вот поток на Redis Vs. Memcached.
Похоже, что у Redis есть 512mb-хранилище, а не ограничение 1mb... QUITE немного отличается:)
Memcached vs. Redis?