серьезный
интервьюер: Ребята, расскажите о своих мыслях о Redis.я: Ах, смотреть, сидя или лежа. Редис маленький? скоро? Но долговечный?
интервьюер: Серьезно, подозреваю, что вы за рулем, не только за рулем, но и занимаетесь цветом.я:. . .
интервьюер: Иди, иди, у меня мало времени, не говори глупостей. Вернемся к теме, как много вы знаете о Redis.я: Легкий и небольшой по размеру, очень быстрый на основе памяти, постоянства RDB и AOF делает его таким же прочным и долговечным.
интервьюер: Быть конкретными.я: Пожалуйста, смотрите текст.
текст
ВведениеRedis — это высокопроизводительная система кэширования и хранения на основе пар «ключ-значение» с открытым исходным кодом, которая адаптируется к потребностям кэширования и хранения в различных сценариях, предоставляя различные типы данных «ключ-значение». В то же время многие высокоуровневые функции Redis делают его подходящим для различных ролей, таких как очередь сообщений и очередь задач. Кроме того, Redis также поддерживает расширение внешнего модуля, который можно использовать в качестве основной базы данных в некоторых конкретных сценариях.
Поскольку скорость чтения и записи памяти намного выше, чем у жестких дисков, даже современное мышление твердотельных дисков, по оценкам, развивается в сторону мышления режима памяти.Может быть, я непрофессионал, но долговременное хранение все же использует механические диски. Таким образом, все данные в базе данных Redis хранятся в памяти, что довольно быстро. Существует также определенный риск, который приведет к потере данных, но сохранение RDB и AOF снизит риск.
1. Первое знакомство с Redis
1. Установка под linux (серия Redhat7)
1.1. Установка
Пакет исходных кодов подготовлен здесь Версия не самая последняя, но стабильная и применимая.
Остальные версии можно получить на официальном сайте или на хостинговой платформе github.Ниже приведен адрес загрузки официального сайта Redis.
redis-6.0.8.tar.gz
#安装
tar -zxvf redis-6.0.8.tar.gz
#编译
make && make install
1.2. Устранение ошибок
make[1]: *** [server.o] 错误 1
1.3 Решения
1.3.1, среда, зависящая от установки
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
1.3.2, добавьте переменные окружения и вступите в силу
scl enable devtoolset-9 bash
echo "/opt/rh/devtoolset-9/enable" >> /etc/profile
Перечитайте файл конфигурации переменной среды
source /etc/profile
Перекомпилируйте, чтобы решить проблему
#切换到Redis的安装目录,一般源码包安装会放在/usr/local/下面,看个人使用习惯
cd /opt/redis-6.0.8/
#编译
make && make install
Общие базовые командные упражнения можно найти в учебнике для новичков.
уууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууу.com/Redis/Redis…
1.4, запуск и вход
Запустите сервер redis-server
#启动redis服务
nohup /opt/redis-6.0.8/src/redis-server &
Войдите в клиент redis-cli
#登录redis-cli
/opt/redis-6.0.8/src/redis-cli
Тест подтвердил, что Redis под Linux был официально успешно запущен в это время, и ниже будет представлено основное использование.
ping
pong
1.5 Установить пароль
По умолчанию нет открытой настройки пароля, и вам нужно вручную открыть закомментированную конфигурацию параметров.
#编辑配置文件
vim /opt/redis-6.0.8/redis.conf
#原本的被注释掉,复制一行改成你设置的密码即可
#requirepass foobared
requirepass 123456
2. Установка под Windows
2.1. Установка
Redis-x64-3.2.100.zip
2.1.1 Разархивируйте его под Windows или установите напрямую с помощью msi.
2.1.2 Установить сервисную команду (зарегистрирована как сервисная форма, самозапускающаяся)установить службу
redis-server --service-install redis.windows-service.conf --loglevel verbose
удалить службу
redis-server --service-uninstall
2.2, запуск и выключение
redis-server redis.windows.conf
2.2.1 Запустите службу
redis-server --service-start
2.2.2, остановить службу
redis-server --service-stop
2.3, запустите службу Redis
#同样在redis解压的或者安装的目录以管理员身份运行cmd
redis-server --service-start
2.4 Запустите тестовый вход под cmd
#在redis解压的或者安装的目录以管理员身份运行cmd
redis-cli.exe -h 127.0.0.1 -p 6379
#或者直接执行
redis-cli
#执行
redis-cli
#登录测试
ping
5. Средство управления rdm под Windows представляет собой визуальный интерфейсredisdesktop.com/download
2. Базовые знания
1. Часто задаваемые вопросы на собеседованиях
интервьюер: Какие типы данных есть в Redis, можете об этом рассказать?
я: string (тип строки), hash (тип хэша), list (тип списка), set (тип набора), zset (тип упорядоченного набора),поток (тип потока)Stream — это новая функция поддержки redis5.0.
интервьюер: Ага, у парня что-то есть, он многое знает, даже типа стрима.
я: Смущенный...
3. Расширенный
1. Настойчивость
интервьюер: Знаете ли вы некоторые дополнительные функции Redis?
я: Немного понял.
интервьюер: Можно конкретно об этом?
я: Быстро резюмировал, читая книги до поисковиков мозга. Приближаются кэширование и постоянство.
Redis используется в качестве сервера кеша, но проникновение в кеш сильно повлияет на производительность, и все кеши будут аннулированы одновременно, в результате чего служба не сможет ответить.
Мы надеемся, что Redis сможет в каком-то виде синхронизировать данные из памяти на диск, чтобы после перезапуска данные можно было восстановить по записям на диске. Этот процесс — настойчивость.
интервьюер: Знаете ли вы, какие общие методы сохранения есть в Redis?
я: сохранение RDB включено по умолчанию в Redis, сохранение AOF необходимо включить вручную.
Redis поддерживает два типа сохраняемости. Один из них — метод RDB, а другой — метод AOF. Первые будут «своевременно» сохранять данные в памяти на жесткий диск по заданным правилам, а вторые будут записывать командную книгу после каждого выполнения команды. Для двух методов сохраняемости вы можете использовать один или другой по отдельности, но в большинстве случаев они тесно связаны.
В это время интервьюер посмотрел на меня с ожиданием, пожалуйста, продолжайте.
2. Метод РБД
Продолжая вводить, RDB принимает метод моментального снимка, и настройка по умолчанию пользовательского моментального снимка [автоматическая синхронизация], конфигурация по умолчанию выглядит следующим образом.
Вы также можете синхронизировать вручную
#不推荐在生产环境中使用
SAVE
#异步形式
BGSAVE
#基于自定义快照
FLASHALL
3. Метод АОФ
При использовании Redis для хранения невременных данных обычно необходимо включить сохранение AOF, чтобы уменьшить потерю данных, вызванную завершением процесса. AOF может добавлять каждую команду, выполняемую Redis, в файл на жестком диске, что, очевидно, снизит производительность Redis в этом процессе, но в большинстве случаев такая ситуация допустима. Здесь подчеркивается, что использование жесткого диска с более высокой скоростью чтения и записи может повысить производительность AOF.
По умолчанию он не включен. Вам нужно включить AOF вручную. Когда вы просмотрите файл redis.conf, вы также обнаружите, что appendonly настроен без
appendonly yes
После включения сохраняемости AOF при каждом выполнении команды каталог данных в Redis будет меняться, и Redis будет записывать команду в файл AOF на диске. Местоположение файла AOF совпадает с местоположением файла RDB, которое задается параметром dir Имя файла по умолчанию — appendonly.aof, которое можно изменить с помощью параметра appendfilename.
appendfilename "appendonly.aof
На самом деле Redis делает именно это.При выполнении определенных условий Redis автоматически перезаписывает файл AOF.Это условие можно задать в конфигурационном файле redis.conf:
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
При запуске Redis будет выполнять команды в файле AOF построчно, чтобы загрузить данные с жесткого диска в память, и скорость загрузки будет ниже, чем у RDB.
Хотя AOF записывает команды в файл AOF каждый раз, когда выполняется операция, изменяющая содержимое базы данных. Но на самом деле из-за механизма кэширования операционной системы данные фактически не записываются на жесткий диск, а попадают в кэш жесткого диска операционной системы. По умолчанию операционная система выполняет операцию синхронизации каждые 30 секунд, чтобы записать содержимое кэша жесткого диска на жесткий диск.
В Redis можно задать время синхронизации через appendfsync:
# appendfsync always
#默认设置为everysec
appendfsync everysec
# appendfsync no
Redis позволяет одновременно открывать AOF и RDB. Это не только обеспечивает безопасность данных, но и упрощает такие операции, как резервное копирование. После перезапуска Redis в этот момент файл AOF будет использоваться для восстановления данных. Благодаря стойкости метода AOF вероятность потери данных сведена к минимуму.
4. Репликация Redis
Благодаря функции сохранения Redis гарантирует, что даже при перезапуске сервера данные не будут потеряны (теряется небольшая их часть). Однако база данных хранится на одном сервере, и различные непредвиденные ситуации, такие как сбой жесткого диска, внезапный простой сервера и т. д., неизбежно приведут к потере данных.
Чтобы максимально избежать сбоев, обычной практикой является создание нескольких копий базы данных для развертывания на разных серверах. Таким образом, даже если один сервер выйдет из строя, другие серверы все равно смогут предоставлять услуги. Для этого в Redis предусмотрена функция репликации (репликации). То есть после обновления данных в одной базе данных обновленные данные автоматически синхронизируются с другими базами данных.
В настоящее время учащиеся, знакомые с MySQL, считают, что это очень похоже на репликацию master-slave в MySQL, чтобы позволить двоичному журналу binlog реализовать синхронную репликацию.
В Redis проще использовать репликацию, чем в MySQL. Просто нужно добавить при запуске из библиотекиslaveof
адрес из базы.
#在从库中配置
slaveof master_database_ip_addr
#测试,加了nohup与&是放入后台,并且输出日志到/root/目录下的nohup.out
nohup /opt/redis-6.0.8/src/redis-server --6380 --slaveof 192.168.245.147 6379 &
4.1 Принцип
Копировать инициализацию. Основной принцип здесь — начать с библиотеки и отправить команду SYNC в основную библиотеку. При этом, после того как основная библиотека получит команду SYNC, она начнет сохранять снимок в фоновом режиме, то есть процесс персистентности RDB, и кэшировать команды, полученные во время создания снимка. Когда снимок будет завершен, Redis отправит файл снимка и все кэшированные команды в подчиненную базу данных. После получения из базы данных файл моментального снимка загружается и выполняется полученная команда кэширования.
Фаза синхронизации репликации проходит через весь процесс синхронизации ведущий-ведомый до тех пор, пока отношения ведущий-ведомый не будут прерваны. Снапшоты играют решающую роль в процессе репликации.Пока выполняется репликация, снимки будут делаться, даже если постоянство RDB отключено, путем удаления всех параметров сохранения.
4.2 Оптимистичная репликация
Redis использует стратегию оптимистичной репликации. Допускается, что содержимое основной и подчиненной баз данных различается в течение определенного периода времени, но данные двух в конечном итоге будут синхронизированы. В частности, процесс копирования данных Redis между главной и подчиненной базами данных является асинхронным, что означает, что после того, как главная база данных выполнит команду, запрошенную клиентом, она немедленно вернет клиенту результат выполнения команды в главной базе данных. , и Синхронизировать данные с ведомой библиотекой асинхронно, не дожидаясь, пока команда, полученная из базы данных, будет возвращена клиенту.
Данные доступны для записи только тогда, когда данные синхронизированы по крайней мере с указанным количеством подчиненных библиотек, заданным параметрами:
#设置最少限制3
min-slaves-to-write 3
#设置允许从数据最长失去连接时间
min-slaves-max-lag 10
4.3. Инкрементная репликация
На основании следующих трех пунктов
- Ведомая библиотека будет хранить идентификатор запуска (идентификатор запуска) главной библиотеки. Каждый работающий экземпляр Redis будет иметьУникальный идентификатор запуска, при каждом перезапуске экземпляра автоматически создается новый идентификатор запуска. Подобно уникальному идентификатору MySQL для идентификации конфигурации подчиненного узла.
- На этапе синхронизации репликации, когда команда из главной библиотеки передается в подчиненную библиотеку, эта команда будет одновременно сохранена в очереди невыполненных работ, а команда, сохраненная в текущей очереди невыполненных работ, будет записана.диапазон смещения.
- Когда ведомая библиотека получает команду от главной библиотеки, оназаписать смещение команды.
4.4 Внимание
Когда происходит сбой основной базы данных, ситуация несколько усложняется. При ручном восстановлении данных базы данных master из базы данных database необходимо строго соблюдать следующие принципы:
- использовать из базы данных
SLAVEOF NO ONE
Команда будет переведена из библиотеки в основную библиотеку для продолжения обслуживания. - Запустите основную библиотеку, которая раньше разбилась, затем используйте
SLAVEOF
команда, чтобы установить его в качестве ведомого нового мастера.
Уведомление: когда включена репликация и отключено сохранение базы данных,Не используйте супервизор и аналогичные инструменты управления процессами для сбоя основной библиотеки и ее перезапуска.. Точно так же, когда сервер, на котором расположена основная библиотека, выключается из-за сбоя, также необходимо избегать прямого перезапуска. Потому что при перезапуске основной библиотекиЕсли функция сохраняемости не включена, все данные в базе данных очищаются.. В это время ведомая библиотека все еще будет получать данные из главной библиотеки.В результате все подчиненные библиотеки также опустошаются, что приводит к одиночеству персистентности базы данных..
Ручное обслуживание действительно хлопотно, но к счастьюRedis предлагает автоматизированное решение: Sentinel.Чтобы реализовать этот процесс, избегайте подверженных ошибкам проблем ручного обслуживания.
5. Страж
Из истории репликации Redis мы узнали, что в типичной системе Redis с одним мастером и несколькими подчиненными библиотека подчиненных играет роль резервного резервного копирования и разделения чтения и записи во всей системе. Когда основная библиотека сталкивается с ненормальным прерыванием обслуживания, разработчик вручную обновляет основную библиотеку из основной библиотеки, чтобы система продолжала работать. Процесс относительно сложен и трудно поддается автоматизации. В настоящее время вы можете использовать инструмент Sentinel.
Роль часового
- Мониторинг работы системы Redis
- Контролируйте, нормально ли работают основная и подчиненная библиотеки.
- Основная библиотека gg Smecta будет автоматически обновлена с библиотеки до основной библиотеки, что отлично
Конечно, есть также несколько дозорных, контролирующих режим базы данных master-slave, и дозорные также будут следить друг за другом, как показано ниже:
Во-первых, необходимо установить модель из одного главного и нескольких ведомых устройств, а затем включить конфигурационный дозор.
#主库
sentinel monitor master 127.0.0.1 6379 1
#建立配置文件,例如sentinel.conf
redis-sentinel /opt/path/to/sentinel.conf
Столько предисловий о часовом, и теперь у меня в голове отпечаток. По крайней мере, я знаю, что такое есть, и могу больше болтать с прекрасной интервьюершей.
6. Кластер
Функция кластеризации была добавлена начиная с Redis3.0.
Даже если используется дозорный, каждая база данных кластера Redis в это время по-прежнему содержит все данные в кластере, поэтому общая емкость хранилища данных кластера ограничена узлом базы данных с наименьшей доступной памятью, а затем возникает бочкообразный эффект. Поскольку все данные в Redis основаны на хранении в памяти, проблема стала заметной, особенно когда Redis используется в качестве службы постоянного хранения.
Есть такая сцена. Что касается расширения емкости, то после того, как клиент будет сегментирован, если будет добавлено больше узлов, базу данных необходимо будет мигрировать вручную. В процессе миграции для обеспечения согласованности данных довольно сложно временно отключить входящую группу.
В настоящее время, учитывая, что Redis очень мал, это не оговорка, а облегченная функция. Предварительное разделение может использоваться, чтобы избежать проблемы в определенной степени. Другими словами, на ранней стадии развертывания заранее продумайте масштаб хранилища и создайте достаточное количество экземпляров.
Исходя из приведенных выше теоретических знаний, дозорные и кластеры похожи, но дозорные и кластеры — это две отдельные функции. Если вы хотите масштабироваться по горизонтали, хорошим выбором будет кластер.
Для настройки кластера откройте конфигурационный файл redis.confcluster-enabled
cluster-enabled yes
Настройте каждый узел кластера для настройки другого рабочего каталога или изменения постоянного файла.
cluster-config-file nodes-6379.conf
Для кластерного тестирования можно выполнить настройку, а также можно обратиться к другим книгам, это не сложно реализовать. Пока вы знаете обоснование.
4. Redis для Java
Пример
package com.jedis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class Test {
@org.junit.Test
public void demo() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.set("name", "sky");
String params = jedis.get("jedis");
System.out.println(params);
jedis.close();
}
@org.junit.Test
public void config() {
// 获取连接池的配置对象
JedisPoolConfig config = new JedisPoolConfig();
// 设置最大连接数
config.setMaxTotal(30);
// 设置最大空闲连接数
config.setMaxIdle(10);
// 获取连接池
JedisPool pool = new JedisPool(config, "127.0.0.1", 6379);
// 获得核心对象
Jedis jedis = null;
try {
//通过连接池获取连接
jedis = pool.getResource();
//设置对象
jedis.set("poolname", "pool");
//获取对象
String pools = jedis.get("poolname");
System.out.println("values:"+pools);
} catch (Exception e) {
e.printStackTrace();
}finally{
//释放资源
if(jedis != null){
jedis.close();
}
if(pool != null){
pool.close();
}
}
}
}
Наконец, я составил очень грубую ментальную карту, я так много написал по прихоти.