Принцип кэширования и дизайн серии Redis
Ссылка на серию Redis
Принцип кэширования и дизайн серии Redis
Основная идея кэширования
Сценарии использования кэша
Кэш БД для снижения нагрузки на сервер
В нормальных условиях данные существуют в базе данных, и прикладная программа управляет базой данных напрямую. Когда количество посещений приложений исчисляется десятками тысяч, резко возрастает нагрузка на БД.Если нужно снизить нагрузку на сервер БД, есть следующие способы:
-
Разделение чтения и записи базы данных
-
Подтаблица базы данных
-
Используйте кеш и реализуйте грубое разделение операций чтения и записи.
Роль кеша: хранить контент или данные, к которым обращалось приложение, и когда приложение снова обращается к ним, сначала выполняется поиск в кеше, а совпадения с кешем возвращают данные. Если он не попал, снова запросите базу данных и сохраните ее в кеше.
Улучшить отзывчивость системы
Данные в базе данных хранятся в файле, то есть на жестком диске. Обмен с памятью.Когда используется большое количество мгновенных обращений (высокий параллелизм), MySQL не сможет ответить из-за частых операций ввода-вывода.
MySQL InnoDB имеет блокировки строк,
Кэшировать данные в Redis, то есть в памяти. Память естественным образом поддерживает высокий уровень одновременного доступа. Большое количество запросов может быть обработано в одно мгновение. qps достигает 100 000 запросов на чтение
Разделение сеансов
Традиционный сеанс поддерживается и управляется самим tomcat. В кластере или распределенной среде разные коты управляют своими сеансами. Репликация сеанса может выполняться только между различными котами через сеть и Io, что сильно влияет на производительность системы.
Сохраните информацию о сеансе после успешного входа в Redis, чтобы несколько серверов (Tomcat) могли совместно использовать информацию о сеансе.
Распределенные блокировки и оптимистичные блокировки (Redis)
- Распределенная блокировка
Вообще говоря, блокировки — это многопоточные блокировки. Несколько процессов (JVM) в процессе также будут вызывать проблемы, когда они выполняются одновременно, и необходимо контролировать время. Можно использовать распределенные блокировки. Использование Redis для реализации sexNX
- оптимистическая блокировка
Блокировки синхронизации, блокировки строк и таблицы в базе данных являются пессимистичными блокировками. Производительность пессимистичных блокировок относительно низкая, а время отклика относительно низкое. Оптимистичные блокировки высокой производительности и высокого отклика (seckill) могут быть достигнуты с помощью Redis. watch + incr
Классификация общих тайников
Кэш клиента
-
кеш страницы
-
Кэш страницы: сама страница хранит некоторые или все элементы и сохраняет их в виде файлов.
-
html5: Cookie, WebStorage (SessionStorage и LocalStorage), WebSql, indexDB, ApplicationCache и т. д.
-
-
кеш браузера
Когда клиент запрашивает ресурс с сервера, он сначала достигает кеша браузера.Если у браузера есть копия «запрошенного ресурса», он может напрямую извлечь ресурс из кеша браузера, а не с исходного сервера.
Кэширование браузера можно разделить на обязательное кэширование и согласованное кэширование.
-
Принудительное кэширование: напрямую используйте кешированные данные браузера.
-
Согласовать кеш: ресурс сервера не изменяется, используйте кеш браузера (304); в противном случае используйте ресурс сервера (200)
-
Кэш приложения
В нативных приложениях данные кэшируются в памяти, файлах или локальной базе данных (SQLite). например, файлы изображений.
веб-кэш
Отвечайте на запросы клиентов через прокси и возвращайте ресурсы данных в кэш для повторных запросов.
- Кэш веб-прокси
Он может кэшировать статические ресурсы собственного сервера, такие как стили, изображения и т. д. Например, обратный прокси nginx.
- Пограничный кеш
Типичным коммерческим сервисом пограничного кэширования является CDN.
Полное название CDN — Content Delivery Network, то есть Content Delivery Network.
Через пограничные серверы, развернутые в разных местах, CDN позволяет пользователям получать желаемый контент поблизости, снижает перегрузку сети и повышает скорость отклика и количество обращений пользователей.
Ключевые технологии CDN в основном включают технологии хранения и распространения контента. Теперь общедоступные поставщики облачных услуг предоставляют услуги CDN.
кеш сервера
Кэширование на стороне сервера является ядром всей системы кэширования. Включая кэширование на уровне базы данных, кэширование на уровне платформы и кэширование на уровне приложения.
-
Кэш уровня базы данных
-
Базы данных используются для хранения и управления данными.
-
MySQL использует механизм кэширования запросов на уровне сервера. Кэшировать запрошенные данные.
-
Структура K-V, ключ: хеш-значение оператора выбора, значение: результат запроса
-
Пул буферов в механизме хранения InnoDB используется для кэширования индексов InnoDB и блоков данных.
-
-
Кэш уровня платформы
Кэширование на уровне платформы относится к платформам приложений с функциями кэширования. Например: GuavaCache, EhCache, OSCache и т. д. Развертывается на сервере приложений, также известном как локальный кеш сервера.
- кэш уровня приложения
Промежуточное ПО с функцией кэширования: Redis, Memcached, EVCache, Tair и др. Хранится в формате К-В.
Используйте кластеры для поддержки высокой доступности, высокой производительности, высокой параллельности и высокой степени расширения.
Преимущества и стоимость кэширования
Преимущество
Улучшить пользовательский опыт
-
Чисто субъективное ощущение, возникающее у пользователей в процессе использования продукта.
-
Использование кеша может повысить скорость отклика системы и значительно улучшить взаимодействие с пользователем.
Снизить нагрузку на сервер
-
Кэширование на стороне клиента и на стороне сети снижает нагрузку на серверы приложений.
-
Кэширование на стороне сервера снижает нагрузку на серверы баз данных.
Улучшить производительность системы
-
Сокращение времени отклика системы
-
Сократите время передачи по сети и задержку приложений
-
Увеличение пропускной способности системы
-
Увеличение количества одновременных пользователей системы
-
Улучшение использования ресурсов базы данных
Недостатки и затраты
Дополнительные расходы на оборудование
-
Кэш — это технология, которая обменивает пространство на время в программных системах.
-
Требуется дополнительное место на диске и памяти для хранения данных
-
Для настройки кластера кэш-серверов требуются дополнительные серверы.
-
Служба кэширования с использованием облачного сервера устраняет необходимость в дополнительных серверах
-
Alibaba Cloud, Baidu Cloud, предоставляют услуги кэширования
Инвалидация кеша с высоким параллелизмом
-
Инвалидация кеша (проникновение кеша, лавина кеша, сбой кеша) будет происходить в сценариях с высоким уровнем параллелизма.
-
Вызывает мгновенное увеличение доступа к базе данных или даже сбои
Синхронизация данных кэша и базы данных
-
Кэш и база данных не всегда могут синхронизировать данные
-
Redis не может постоянно выполнять синхронизацию данных master-slave.
Соревнование по параллельному кэшированию
- Проблемы параллелизма, вызванные порядком выполнения, когда несколько клиентов Redis одновременно устанавливают ключ
Кэшированный режим чтения-записи
Кэш обычно имеет три режима чтения и записи.
Cache Aside Pattern (обычно используется, обход кэша)
Cache Aside Pattern — самый классический шаблон чтения и записи кэша + базы данных.
- При чтении сначала прочитайте кеш, если кеша нет, прочитайте базу, затем выньте данные и поместите их в кеш, и заодно верните ответ.
- При обновлении сначала обновите базу данных, а затем удалите кеш.
Три случая большого количества одновременных грязных чтений
- 1. Сначала обновите базу данных, затем обновите кеш.
Между обновлением и фиксацией, если кеш обновляется, а фиксация завершается ошибкой, данные базы данных несовместимы с кэшированными данными.
- 2. Сначала удалите кэш, затем обновите базу данных.
Между обновлением и фиксацией происходит новое чтение, кеш пуст, данные из базы данных, прочитанные в кеш, являются старыми данными, после фиксации данные базы данных являются новыми данными, затем данные базы данных несовместимы с кэшированными данными.
- 3. Сначала обновите базу данных, затем удалите кеш (рекомендуется)
Чтение/запись через шаблон
Приложение работает только с кешем, а кеш работает с базой данных.
Сквозное чтение (через режим чтения/режим прямого чтения): приложение читает кэш, в кеше его нет, кеш возвращается источнику в базу данных, а кеш записывается.
Сквозная запись (через режим записи/режим сквозной записи): приложение записывает в кеш, а кеш записывает в базу данных.
В этом режиме необходимо предоставить обработчик для базы данных, а разработка более сложная.
Запись шаблона кэширования
Приложение только обновляет кеш.
Кэш обновляет данные пачками или сливает в БД асинхронным способом, который время от времени не может синхронизироваться и даже теряет данные.
Идеи дизайна архитектуры кэша
Многоуровневый
тип данных
В зависимости от данных используются разные типы данных.
кластер
-
Sentinel + ведущий-ведомый
-
RedisCluste
Структура кэшированных данных
-
1. В соответствии с таблицей базы данных
- Существует однозначное соответствие между таблицами базы данных и кэшами.
- Кэшированные поля будут меньше, чем таблицы базы данных
- Кэшированные данные часто используются
-
2, несовместимо с таблицей базы данных
- Необходимо хранить отношения, агрегации, расчеты и т. д.