Серия статей Redis
- Насколько вы освоили основы Redis? Чтобы проверить на утечки?
- Redis не слышал об этих структурах данных, и вы
Зачем нужна настойчивость
просто потому чтоRedis
дана основе памятииз. Если данные не сохраняются, данные не могут быть восстановлены при перезапуске или сбое сервера, поэтому для обеспечения безопасности данных нам необходимо сохранить данные в памяти на диск.
Постоянство Redis
Redis
Предоставляет два метода сохраняемости, а именноRDB
а такжеAOF
.
-
RDB :
Redis
Метод сохраняемости по умолчанию основан наснимокдостичь при соблюдении определенных условийRedis
Данные в памяти автоматически сохраняются на диске. -
AOF :
Redis
Не включено по умолчаниюAOF
Постоянство, необходимо установить в файле конфигурацииappendonly true
на. он хранитRedis
изпоследовательная последовательность инструкций.
Сохранение в режиме RDB
сохранить метод блокировки
существуетRedis
Есть команда запускаRDB
Постоянство, но эта операция будет заблокированаRedis
.
Эта командаsave
,мы все знаемRedis
является однопоточным, если сохраняетсяспециальная обработкаЕсли это так, то он будет блокировать другие команды, что приведет кRedis
недоступен в течение короткого периода времени, еслиRDB
Если файл очень большой, то операция прошивки будет занимать десятки секунд, что серьезно повлияет на удобство использования, поэтому мы его вообще не используем.save
Заказ.
фоновый режим bgsave
bgsave
Как следует из названия, этосохранить в фоновом режиме. при выполнении этой командыRedis
сделаю кое-чтоособый уход.
Какое специальное лечение?
во-первыхRedis
Основной процесс вызоветglibc
Функцияfork
Запускается дочерний процесс, который сохранит файлВсе персистентность передается дочернему процессу для обработки, то родительский процесс может продолжить обработку запроса пользователя (bgsave
вернется сразу после выполнения). Конечно, в основном процессеfork
При работе он также может запрашивать команды у пользователя.производить кратковременную блокировку.
Все имеет преимущества и недостатки, вы видитеbgsave
Так хорошо, нет ли минусов? Ответ - да, где это? Давайте сначала узнаемCOWмеханизм.
COW
COW(копировать при записи), т.е.копирование при записи. мы знаемRDB
Постоянство требует обхода данных в памяти, как показано на рисунке ниже.
Потому что нам нужны данные в момент генерации дочернего процесса (снимок), если данные в основном процессе изменены по запросу пользователя, память, пройденная дочерним процессом, будет изменена.не моментальные данные.
Итак, вот механизм создания снимков —COW. Мы знаем, что приведенный выше сегмент данных на самом деле состоит из множества операционных систем.Страницакомбинированный.COW На самом деле, когда основному процессу необходимо изменить данные в памяти, он сначала копирует страницу, на которой находятся данные, которые нужно изменить, а затем модифицирует их на скопированной странице..Когда страница копируется, она занимает дополнительную память, что такжеbgsave
коэффициент использования памятиsave
Причин много, но сильно не переживайте, ведь запросов пользователей на изменение данных в период пересохранения будет не много, да и используемой дополнительной памяти будет не много.
Автоматически запускать RDB
существуетRedis
Есть несколько ситуаций, в которыхRDB
настойчивость, так что даже если вы выключитеRDB
,Redis
все еще будет продолжатьсяRDB
упорство.
-
когда условия соблюдены
существует
Redis
В файле конфигурации есть три конфигурации.save 900 1 save 300 10 save 60 10000
Это на самом деле
RDB
Причина, по которой он включен по умолчанию в , его формат такойsave seconds changeTimes
,save
Первое число позади — это время, а второе число — количество модификаций.Эти три конфигурации означают, что одна модификация выполняется в течение 900 секунд, или 10 модификаций — в течение 300 секунд, или 10 000 — в течение 60 секунд. быть сделаннымRDB
автоматическая настойчивость. -
shutdown
когдаRedis
Это будет сделано во время обычного завершения работыRDB
Упорство. -
flushall
будет производить пустойRDB
документ -
Когда master-slave репликация полностью реплицирована (пока этого достаточно для понимания, о кластере Redis я расскажу в следующей статье)
Преимущества RDB
-
RDB
файл, который сжат и хранит данные, которые могут бытьБыстрое аварийное восстановление. - Подходит для холодного приготовления.
Недостатки РБД
-
легко потерять данные,так как
RDB
Необходимо просмотреть все данные во всей памяти, поэтомусделай это один разRDB
Операция кропотливая и кропотливая, чтобы убедиться, чтоRedis
высокая производительность, которую необходимо минимизироватьRDB
постоянство, поэтому вы можете потерять данные на некоторое время.
Стойкость АОФ
по умолчаниюRedis
не включенAOF
Постоянный, вам нужно настроить его в файле конфигурации.
appendonly yes # 默认为no这里设置yes开启
dir ./ # aof文件目录
appendfilename "appendonly-6379.aof" #aof文件名
включиAOF
После настойчивости,Redis
будет основываться наAOF
стратегия настойчивостиЧтобы выполнить соответствующую операцию сохранения, конкретная конфигурация находится вappendfsync
конфигурация.
# appendfsync always 每次进行修改操作就进行写盘
appendfsync everysec 每秒进行一些写盘
# appendfsync no 从不
Redis
Всего предусмотрено три параметра, обычно рассмотрите настройкуeverysec
Записывает на диск каждую секунду, что снижает как эффективность, так и потерю данных.
Принцип АОФ
AOF
Журнал хранится дляRedis
инструкции по эксплуатации, сAOF
log мы можем использовать его дляRedis
повтор.
Например, в это время мыAOF
записано в журналеset hello world
а такжеsadd userset FancisQ
С помощью этих двух команд мы можемRedis
пример сделать этоAOF
воспроизведение файла, и в итоге это пустоеRedis
Выше есть две записи.
вы можете найтиRedis
Два метода сохранения в очень похожиMySQL
серединаbin log
а такжеredo log
, но вы должны заметить, чтоRedis
серединаAOF
даСначала выполните команду, а затем сохраните журнализ. с участиемMySQL
серединаWALМеханизм прямо противоположный.
Зачем? Я думаю, что есть два момента.
-
Redis
Это слабая транзакция, нам не нужно обеспечивать сильную согласованность данных. существуетMySQL
в мы использовалиredo log
двухэтапная фиксациягарантироватьsave-crash
способности, при этомRedis
Очевидно, что нам не нужно этого делать.Если команда упадет до записи журнала после выполнения команды, она исчезнет.Из-за слабых транзакций мы не должны гарантировать, что данные должны существовать. - Во избежание хранения в логе неправильных инструкций, если мы пишем лог первым, значит мы не выполнили соответствующую работу в начале.Логическая обработка и проверка параметров, так что это будетСначала было записано много неправильных инструкций, но мы знаем
AOF
файл требуетсяхудетьДа, эти инструкции по ошибкам дадутAOF
Похудение приносит много хлопот.
AOF переписать
Потеря веса, упомянутая выше, на самом делеAOF переписать,мы знаемAOF
В файле хранится порядок инструкций, когдаRedis
При длительной работе генерируется много инструкций.
Например
set a b
,set a c
,set a d
.....
На самом деле три вышеупомянутыхkey
Операция выполняется над данными a, вRDB
это может только выжитьa = d
,Но потому чтоAOF
механизм инструкций, должно существовать три, но первое бессмысленно, что займет много места и дастAOF
Повтор приносит неприятности.
такRedis
Будет вAOF
Когда файл слишком большой (соответствует определенному условию)автоматическийAOF
переписать. Соответственно таких конфигураций в конфигурационном файле две.
# 下面两条需要同时满足
# 表示当前 aof 文件超过上次 aof文件大小的百分之多少时会进行重写,如果没有重写过则以启动时的大小为标准
auto-aof-rewrite-percentage 100
# 文件大于多少的时候进行重写
auto-aof-rewrite-min-size 64mb
Так,AOF
Как переписывается?
bgrewriteaof
ЭтоAOF
Команда перезаписи (описанный выше процесс перезаписи на самом делеbgrewriteaof
),а такжеbgsave
Такой же,Redis
также будетfork
Дочерний процесс, пусть дочерний процесс берет на себя ответственностьAOF
перезаписать файл. Общий процесс выглядит следующим образом:
Преимущества и недостатки АОФ
- Недостатки: при одинаковом объеме данных
AOF
размер файла, чемRDB
файл намного больше,Если использовать его для восстановления состояния памяти, это займет много времени. - Преимущества: быстрая стойкость,Может уменьшить количество потерь данных, в конфигурации
everysec
В случае максимум, будут потеряны только секунды данных.
Гибридное постоянство Redis
существуетRedis
До 4.0 мы обычно открывалиAOF
Затем выбросьте его, когда вам нужно восстановить состояние памяти.Воспроизведение журнала AOF ( Если вы используете RDB, вы потеряете много данных). но еслиRedis
Пример большой,AOF
Если файл также большой, это вызоветRedis
Перезагрузка очень медленная.
Для решения этой проблемы вRedis
После 4.0 мы можемRDB
документы иAOF
Инкрементные журналы хранятся вместе. Если мы восстановим состояние памяти в это время, мы сможем использовать предыдущееRDB
раздел, а затем используйтеRDB
Инкрементальный журнал AOF создается после сохранениявыполнить восстановление состояния памяти, чтобы сократить время.
Как выбрать RDB и AOF
- Вообще говоря, если есть определенные требования к безопасности данных, вам следуетИспользуйте обе функции сохраняемости одновременно.
- еслиМожет противостоять минутной потере данныхможно просто использовать
RDB
. -
AOF
использовать как можно большеeverysec
Конфигурация может не только обеспечить безопасность данных, но и обеспечить эффективность работы. -
RDB
близкоsave seconds changeTimes
Это автоматический механизм сохраняемости или разумное использование параметров.
карта разума
Спасибо за чтение. Поделитесь с вами своей картой ума (#^.^#)