Memcache и Redis оба хранят данные в памяти.
Memcache более простой инструмент для хранения данных в памяти как key-value
Redis более сложный инструмент который поддерживает: сохранение данных на диск, богатый набор функций (транзакции , подписки, хэш таблицы), репликации и кластеризации данных
Консистентность данных
Когда данные кэшируются, существует риск расхождения данных между кэшем и источником данных.
Инвалидация кэша
Когда данные в источнике данных изменяются или устаревают, необходимо обновить соответствующие данные в кэше.
Проблемы с производительностью
Неправильное использование кэширования может привести к ухудшению производительности. Например, некорректно выбранные ключи кэша или частое обращение к кэшу без необходимости может снизить производительность системы.
Синхронизация кэша
Если приложение работает в распределенной среде с несколькими экземплярами или серверами, необходимо обеспечить синхронизацию кэша между ними.
Потеря данных
Если кэш не настроен или управляется неправильно, возможна потеря данных. Например, при сбое системы или перезапуске сервера данные в кэше могут быть утрачены.
Конкуренция за ресурсы
Если множество запросов одновременно обращается к кэшу, может возникнуть конкуренция за ресурсы.
Memcached - это система кэширования в памяти, которая используется для ускорения доступа к данным и снижения нагрузки на базу данных или другие источники данных. Она предоставляет простой и быстрый способ сохранения и извлечения данных, основанных на ключе.
Подводные камни при работе:
Ограничение объема памяти, отказоустойчивость и сохранность данных, инвалидация кэша и синхронизация данных
Пути их решения
- Оптимизация использования памяти
Можно мониторить использование памяти в Memcached и оптимизировать размеры хранимых данных или реализовать стратегию устаревания данных для удаления неиспользуемых записей.
- Репликация и перезапуск
Можно настроить репликацию Memcached, чтобы иметь резервные копии данных в случае сбоев.
- Инвалидация кэша
Используйте стратегии инвалидации кэша, такие как временные метки или событийные системы, чтобы определить, когда данные в Memcached должны быть обновлены.
- Координация и синхронизация
Разработайте соответствующие механизмы синхронизации и координации для обновления данных в Memcached
- По количеству обращений
- По частоте обращений
- LIFO и FIFO
- Hot cache
С помощью тегов
- CDN, модели push (самому нужно выбирать контент который заранее загружать) и pull (запрос от клиента)
- Строки (Хранение часто запрашиваемых данных для быстрого доступаб счётчики)
- Хэши (Хранение данных о пользователях, таких как имя, возраст, адрес)
- Списки - упорядоченные коллекции строк (Очереди)
- Множества - неупорядоченные коллекции уникальных строк (Хранение уникальных тегов или категорий.)
- Отсортированные множества (Хранение и сортировка очков игроков)
- Битмапы (Отслеживание активности пользователей по дням)
- Гиперлоглоги (Подсчет уникальных посетителей или событий)
- Потоки (Хранение и обработка последовательности событий)
- Отсутствие гарантированной устойчивости данных
- Проблемы с согласованностью данных
- Ограниченная транзакционная поддержка
- Высокая стоимость оперативной памяти