предисловие
Всем привет, меня зовут Сяо П. Эта серия статей посвящена знакомству с 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
, то какие у него характеристики?Пожалуйста, запомните приведенные ниже ответы (конечно, если у вас плохая память, например, я могу вспомнить несколько ключевых моментов). Взгляните на ответ:
-
Высокая скорость, производительность чтения и записи составляет 10 Вт/с, конечно, это также связано с конфигурацией машины.
Почему быстро? операции с памятью,
C
Реализация языка, вдали от операционной системыAPI
ближе;单线程架构
(Помните, чтобы не ошибиться), чтобы избежать потерь, вызванных многопоточной конкуренцией.IO
Мультиплексирование, протокол простой. -
Он поддерживает постоянство.Хотя это операция памяти во время взаимодействия, он предоставляет механизм диска данных для предотвращения потери данных, вызванной сбоем питания.
-
Поддержка репликации master-slave: несколько копий узлов Master-Slave
-
Поддержка высокой доступности HA: механизм Sentinel обеспечивает высокую доступность и обеспечивает автоматическое обнаружение и отработку отказов узлов.
-
Поддерживает несколько клиентских языков: Java, Python, C++ и т. д.
сцены, которые будут использоваться
Когда вы можете рассмотреть возможность его использования? Когда это можно использовать вместо умышленного хвастовства? Давайте посмотрим на текущие распространенные варианты использования:
- Кэш: добавьте кеш перед базой данных, чтобы уменьшить нагрузку на чтение и запись базы данных.
- Таблица лидеров: Рейтинг по популярности, ранжирование по времени выпуска
- Счетчик: количество воспроизведений, количество просмотров
- Социальные сети: «Мне нравится», «Дизлайк», «Поклонники», «Потяните и обновите».
- Очередь сообщений: публикация подписка
Установить
Redis
служба поддержкиWindows
а такжеLinux
Если только их собственная игра, можно использовать напрямуюWindows
версия, очень простой и быстрый запуск. не дано здесьWindows
Инсталляционный пакет в среде есть по всему интернету. Далее в основном описываетсяLinux
Установка и базовая настройка в среде (конечно, это просто простая настройка для обеспечения возможности подключения клиента службы)
кcentos7
Пример:
- проверка зависимости
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
- Загрузите и скомпилируйте установочный пакет
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 | инструмент для создания кластера кластера |
- Выбор версии
Вторая четная цифра в номере версии — это стабильная версия.
структура данных
Здесь мы также представляем общие структуры данных 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");
Конечно операций в ней еще много.Для удобства понимания нарисовал картинку.
Из-за порядка естественно поддерживается получение по нижнему индексу. Примечание. В списке может храниться до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);
- использовать хэш-структуру
hmset user:1 name pleuvoir age 18
Преимущества: простой и понятный, каждая клавиша соответствует значению. Недостатки: Хеш-структура занимает большой объем памяти, а максимальное хранилище512M
.
- Сериализация
Здесь есть два случая: один — использовать строковую форму, другой — использовать инструменты сериализации, такие какProtoBuf
Хранится в бинарном виде.
Строковая форма:
set user {"name":"pleuvoir","age":18}
Бинарная форма отображаться не будет, при разумном использовании может экономить память, но если для просмотра использовать какие-то графические инструменты, то может быть не очень понятно.
Общие недостатки этих двух методов сериализации: изменение свойства, изменение и десериализация всего объекта, а затем сериализация и сохранение значения после установки значения.Redis
Эта стоимость все еще относительно велика. Преимущество есть: программирование простое.
глобальная команда
# 查看所有Key,线上谨慎操作
keys *
# 检查是否存在
exists [key]
# 设置过期时间
expire [key] [seconds]
# 查看过期时间
ttl [key]
# 查看键的数据类型
type [key]
Ссылка на ссылку
послесловие
Эта статья правильнаяRedis
Вводная статья написана здесь, а следующая статья будет посвящена некоторым расширенным сценариям использования.