Redis от входа до выхода — основы

Микросервисы

предисловие

Всем привет, меня зовут Сяо П. Эта серия статей посвящена знакомству с Redis и расширенному использованию Redis. Надеюсь, она будет полезна всем.

Основание

представлять

Первый взгляд наофициальный сайт редис, если вы чувствуете усталость, есть также китайская версия, переведенная китайцамиRedis китайский сайт. Взгляните на веб-сайт нижеRedisвведение.

Redis — это система хранения данных в оперативной памяти с открытым исходным кодом (под лицензией BSD), которую можно использовать в качестве базы данных, кэша и промежуточного программного обеспечения для обмена сообщениями. Он поддерживает несколько типов структур данных, таких как строки, хэши, списки, наборы, отсортированные наборы и запросы диапазона, растровые изображения, гиперлоглоги и запрос радиуса геопространственного (геопространственного) индекса. Redis имеет встроенную репликацию (replication), сценарии LUA (сценарии Lua), события, управляемые LRU (выселение LRU), транзакции (транзакции) и различные уровни персистентности диска (persistence), а также через Redis sentinel (Sentinel) и автоматическое разделение (кластер)) для обеспечения высокой доступности (высокой доступности).

Если вы все еще чувствуете себя странно, когда видите это, ничего страшного. Проще говоряRedisЭто высокопроизводительная база данных в памяти, основанная на ключе-значении. Он предоставляет несколько полезных и удобных структур данных, таких как Value.string、hash、list、set、zset, Благодаря наличию этой структуры мы можем гибко применять эти структуры для оптимизации нашей технической реализации в нашей обычной разработке. в то же время,RedisТакже предоставляются другие дополнительные функции, такие как истечение срока действия ключа, публикация-подписка, транзакции, конвейерная обработка и т. д. Если вы не поймете этого после прочтения этого, ничего страшного, тогда я постепенно раскрою его тайну. Позвольте вам действительно сделать от входа, чтобы выйти из двери.

характеристика

Если кто-нибудь спросит вас, использовали ли выRedis, то какие у него характеристики?Пожалуйста, запомните приведенные ниже ответы (конечно, если у вас плохая память, например, я могу вспомнить несколько ключевых моментов). Взгляните на ответ:

  1. Высокая скорость, производительность чтения и записи составляет 10 Вт/с, конечно, это также связано с конфигурацией машины.

    Почему быстро? операции с памятью,CРеализация языка, вдали от операционной системыAPIближе;单线程架构(Помните, чтобы не ошибиться), чтобы избежать потерь, вызванных многопоточной конкуренцией.IOМультиплексирование, протокол простой.

  2. Он поддерживает постоянство.Хотя это операция памяти во время взаимодействия, он предоставляет механизм диска данных для предотвращения потери данных, вызванной сбоем питания.

  3. Поддержка репликации master-slave: несколько копий узлов Master-Slave

  4. Поддержка высокой доступности HA: механизм Sentinel обеспечивает высокую доступность и обеспечивает автоматическое обнаружение и отработку отказов узлов.

  5. Поддерживает несколько клиентских языков: Java, Python, C++ и т. д.

сцены, которые будут использоваться

Когда вы можете рассмотреть возможность его использования? Когда это можно использовать вместо умышленного хвастовства? Давайте посмотрим на текущие распространенные варианты использования:

  • Кэш: добавьте кеш перед базой данных, чтобы уменьшить нагрузку на чтение и запись базы данных.
  • Таблица лидеров: Рейтинг по популярности, ранжирование по времени выпуска
  • Счетчик: количество воспроизведений, количество просмотров
  • Социальные сети: «Мне нравится», «Дизлайк», «Поклонники», «Потяните и обновите».
  • Очередь сообщений: публикация подписка

Установить

Redisслужба поддержкиWindowsа такжеLinuxЕсли только их собственная игра, можно использовать напрямуюWindowsверсия, очень простой и быстрый запуск. не дано здесьWindowsИнсталляционный пакет в среде есть по всему интернету. Далее в основном описываетсяLinuxУстановка и базовая настройка в среде (конечно, это просто простая настройка для обеспечения возможности подключения клиента службы)

кcentos7Пример:

  1. проверка зависимости
 yum install cpp -y
 yum install binutils -y
 yum install glibc-kernheaders -y
 yum install glibc-common -y
 yum install glibc-devel -y
 yum install gcc -y
 yum install make -y
  1. Загрузите и скомпилируйте установочный пакет
 cd /usr/local
 mkdir soft
 cd soft
 wget http://download.redis.io/releases/redis-4.0.6.tar.gz
 tar xzf redis-4.0.6.tar.gz
 cd redis-4.0.6
 make

 mkdir /usr/local/redis
 cp redis-server /usr/local/redis
 cp redis-benchmark /usr/local/redis
 cp redis-check-rdb /usr/local/redis
 cp redis-sentinel /usr/local/redis
 cp redis-cli /usr/local/redis
 cp redis.conf /usr/local/redis

Как правило, необходимо установить пароль, обратите внимание на изменениеredis.confизменить файл requirepass 123456789 и изменитьbind 127.0.0.1Это внешний сетевой IP-адрес этой машины, в противном случае он не может быть подключен через удаленную машину.

запускать:./redis-server redis.conf &

Подключиться через клиент:./redis-cli -h 192.168.9.100 -p 6379 -a 123456789

запускаемый файл эффект Примечание
redis-server запустить редис
redis-cli командная строка клиента Redis Базовое использование API можно выполнить с помощью этого инструмента.
redis-benchmark Инструмент сравнительного анализа Инструменты тестирования производительности, как правило, не затрагиваются
redis-check-aof Инструмент постоянного обнаружения и восстановления файлов AOP
redis-check-dump Инструмент обнаружения и восстановления постоянных файлов RDB
redis-sentinel начать часовой
redis-trib инструмент для создания кластера кластера
  1. Выбор версии

Вторая четная цифра в номере версии — это стабильная версия.

структура данных

Здесь мы также представляем общие структуры данных Redis для вашего удобства.

Удаление базы данных и бегствоflushall, чтобы очистить все значения.

Общие операции

# 设置 key 为 name,value 为 pleuvoir 的字符串,并且10秒后过期
set name pleuvoir ex 10
# 查看 key = name 的过期时间
ttl name
# 查看 key = name 的值
get name
# set nx 如果没有则设置,否则不操作(分布式锁常用)
setnx name pleuvoir

Пакетное заданное значение, сокращение операций ввода-вывода, атомарность

mset country china city bj
mget country city

автоматическое увеличение/уменьшение операции

# 第一次没有值会为1
incr age

#获得的值为1
get age

# 减操作,一直减的话是可以变为负数的
# decr age

# 按照指定的区间,每次加10
incrby age 10

# 按照浮点型,incr 只能针对整型
incrfloat score 1.1

хэш-операция

#设置
hmset user:1 name pleuvoir age 18

#获取
hgetall user:1

Список

Проще говоря, значение, соответствующее ключу, представляет собой несколько упорядоченных строк. соответствуетJavaВ следующих:

List<String> users = new ArrayList();
users.add("pleuvoir");
users.add("realtrump");
users.add("jack");

Конечно операций в ней еще много.Для удобства понимания нарисовал картинку.

redis-list
redis-list

Из-за порядка естественно поддерживается получение по нижнему индексу. Примечание. В списке может храниться до2^32-1элементы. Ниже показаны следующие команды списка.

# 从右向左插入 返回3
rpush users pleuvoir realtrump jack

# 查找所有元素
lrange users 0 -1

# 返回当前列表长度
llen users

# 弹出最左边元素
lpop users

Коллекция (Набор)

Хранит несколько элементов, не допускает дублирования значений и неупорядочен. только сохранить2^32-1элементы. Кроме того, вы можете найти пересечение, объединение и различие. Вы можете использовать эту функцию для выполнения некоторых требований приложения. Он используется следующим образом:

# 插入
sadd language chinese english

# 若再次插入则忽略重复
sadd language chinese english

# 查看全部(结果无序
smembers language

# 删除某个元素
srem language chinese

# 查看当前元素个数
scard language

Кроме того, благодаря тому, что пересечение можно вычислить, в практических приложениях, например, можно получить одинаковые увлечения двух людей.

# 小明喜欢的颜色
sadd color:xiaoming red blue green

# 小红喜欢的颜色
sadd color:xiaohong red blue

# 计算他们共同喜欢的颜色
sinter color:xiaoming color:xiaohong

Сортированный набор (Zset)

Обычно используется в качестве таблицы лидеров. Разница между конкретным и набором заключается в том, что каждый элемент имеет дополнительный балл. Это можно отсортировать по рейтингу.

Следующий набор данных используется в качестве примера, чтобы увидеть, как выполнить операцию с помощью команды.good_ranks

score member
20 xiaoming
300 xiaohong
1 xiaowang
# 初始化点赞数据
zadd good_ranks 20 xiaoming 300 xiaohong 1 xiaowang
# 查看分数与成员
zrange good_ranks 0 -1 withscores
查看分数与成员
Просмотр результатов и участников

Видно, что оценки по умолчанию отсортированы от меньшего к меньшему.

# 返回xiaoming的名次,正向排序。返回1 下标从0开始,是第二名
zrank good_ranks xiaoming
# 返回xiaowang的名次,反向排序。他排在最上面,反向则返回2
zrevrank good_ranks xiaowang

Вот лишь несколько сценариев.Ниже приведен практический пример того, как сохранить информацию об объекте в приложении.

Пример сценария

Предполагая, что нам нужно хранить информацию о пользователе, какие структуры данных мы должны выбрать, и каковы их преимущества и недостатки?

Теперь есть объект:

User user = new user();
user.setName("pleuvoir");
user.setAge(18);
  1. использовать хэш-структуру
hmset user:1 name pleuvoir age 18

Преимущества: простой и понятный, каждая клавиша соответствует значению. Недостатки: Хеш-структура занимает большой объем памяти, а максимальное хранилище512M.

  1. Сериализация

Здесь есть два случая: один — использовать строковую форму, другой — использовать инструменты сериализации, такие какProtoBufХранится в бинарном виде.

Строковая форма:

set user {"name":"pleuvoir","age":18}

Бинарная форма отображаться не будет, при разумном использовании может экономить память, но если для просмотра использовать какие-то графические инструменты, то может быть не очень понятно.

Общие недостатки этих двух методов сериализации: изменение свойства, изменение и десериализация всего объекта, а затем сериализация и сохранение значения после установки значения.RedisЭта стоимость все еще относительно велика. Преимущество есть: программирование простое.

глобальная команда

# 查看所有Key,线上谨慎操作
keys * 

# 检查是否存在
exists [key]

# 设置过期时间
expire [key] [seconds]

# 查看过期时间
ttl [key]

# 查看键的数据类型
type [key]

Ссылка на ссылку

Справочник по командам Redis

послесловие

Эта статья правильнаяRedisВводная статья написана здесь, а следующая статья будет посвящена некоторым расширенным сценариям использования.