Шпаргалка по Redis

Изучите Redis с практическими лабораторными работами

Изучите операции со структурами данных в памяти Redis с помощью практических лабораторных работ и сценариев реального мира. LabEx предлагает комплексные курсы по Redis, охватывающие основные команды, структуры данных, стратегии кэширования, обмен сообщениями pub/sub и оптимизацию производительности. Освойте высокопроизводительное кэширование и обработку данных в реальном времени.

Установка и настройка Redis

Docker: docker run redis

Самый быстрый способ запустить Redis локально.

# Запуск Redis в Docker
docker run --name my-redis -p 6379:6379 -d redis
# Подключение к Redis CLI
docker exec -it my-redis redis-cli
# Запуск с постоянным хранилищем
docker run --name redis-persistent -p 6379:6379 -v redis-data:/data -d redis

Linux: sudo apt install redis

Установка сервера Redis в системах Ubuntu/Debian.

# Установка Redis
sudo apt update
sudo apt install redis-server
# Запуск службы Redis
sudo systemctl start redis-server
# Включение автозапуска при загрузке
sudo systemctl enable redis-server
# Проверка статуса
sudo systemctl status redis

Подключение и проверка: redis-cli

Подключение к серверу Redis и проверка установки.

# Подключение к локальному Redis
redis-cli
# Проверка соединения
redis-cli PING
# Подключение к удаленному Redis
redis-cli -h hostname -p 6379 -a password
# Выполнение одной команды
redis-cli SET mykey "Hello Redis"

Базовые операции со строками

Установка и получение: SET / GET

Хранение простых значений (текст, числа, JSON и т. д.).

# Установка пары ключ-значение
SET mykey "Hello World"
# Получение значения по ключу
GET mykey
# Установка с истечением срока действия (в секундах)
SET session:123 "user_data" EX 3600
# Установка только если ключ не существует
SET mykey "new_value" NX
Викторина

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

Что делает команда SET mykey "value" EX 3600?
Устанавливает ключ со значением в 3600 байт
Устанавливает ключ, только если он существует
Устанавливает ключ со значением, которое истекает через 3600 секунд
Устанавливает ключ с 3600 различными значениями

Манипуляции со строками: APPEND / STRLEN

Изменение и просмотр строковых значений.

# Добавление к существующей строке
APPEND mykey " - Welcome!"
# Получение длины строки
STRLEN mykey
# Получение подстроки
GETRANGE mykey 0 4
# Установка подстроки
SETRANGE mykey 6 "Redis"

Числовые операции: INCR / DECR

Увеличение или уменьшение целочисленных значений, хранящихся в Redis.

# Увеличение на 1
INCR counter
# Уменьшение на 1
DECR counter
# Увеличение на определенную величину
INCRBY counter 5
# Увеличение с плавающей точкой
INCRBYFLOAT price 0.1
Викторина

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

Что произойдет, если использовать INCR для ключа, которого не существует?
Redis создает ключ со значением 1
Redis возвращает ошибку
Redis создает ключ со значением 0
Ничего не происходит

Множественные операции: MSET / MGET

Эффективная работа с несколькими парами ключ-значение.

# Установка нескольких ключей одновременно
MSET key1 "value1" key2 "value2" key3 "value3"
# Получение нескольких значений
MGET key1 key2 key3
# Установка нескольких, только если ни один не существует
MSETNX key1 "val1" key2 "val2"

Операции со списками

Списки — это упорядоченные последовательности строк, полезные в качестве очередей или стеков.

Добавление элементов: LPUSH / RPUSH

Добавление элементов в левую (голову) или правую (хвост) часть списка.

# Добавить в голову (слева)
LPUSH mylist "first"
# Добавить в хвост (справа)
RPUSH mylist "last"
# Добавить несколько элементов
LPUSH mylist "item1" "item2" "item3"

Удаление элементов: LPOP / RPOP

Удаление и возврат элементов из концов списка.

# Удалить из головы
LPOP mylist
# Удалить из хвоста
RPOP mylist
# Блокирующий pop (ожидание элемента)
BLPOP mylist 10

Доступ к элементам: LRANGE / LINDEX

Получение элементов или диапазонов из списков.

# Получить весь список
LRANGE mylist 0 -1
# Получить первые 3 элемента
LRANGE mylist 0 2
# Получить конкретный элемент по индексу
LINDEX mylist 0
# Получить длину списка
LLEN mylist
Викторина

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

Что возвращает команда LRANGE mylist 0 -1?
Только первый элемент
Все элементы в списке
Только последний элемент
Ошибка

Утилиты для списков: LSET / LTRIM

Изменение содержимого и структуры списка.

# Установить элемент по индексу
LSET mylist 0 "new_value"
# Обрезать список до диапазона
LTRIM mylist 0 99
# Найти позицию элемента
LPOS mylist "search_value"

Операции с множествами (Set)

Множества — это коллекции уникальных, неупорядоченных строковых элементов.

Базовые операции с множествами: SADD / SMEMBERS

Добавление уникальных элементов во множество и получение всех членов.

# Добавить элементы во множество
SADD myset "apple" "banana" "cherry"
# Получить всех членов множества
SMEMBERS myset
# Проверить, существует ли элемент
SISMEMBER myset "apple"
Викторина

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

Что произойдет, если попытаться добавить дублирующийся элемент в множество Redis?
Будет создана ошибка
Он заменит существующий элемент
Дубликат игнорируется, и множество остается без изменений
Будет создан список
# Получить размер множества SCARD myset ```

Модификации множеств: SREM / SPOP

Удаление элементов из множеств различными способами.

# Удалить конкретные элементы
SREM myset "banana"
# Удалить и вернуть случайный элемент
SPOP myset
# Получить случайный элемент без удаления
SRANDMEMBER myset

Операции с множествами: SINTER / SUNION

Выполнение математических операций с множествами.

# Пересечение множеств
SINTER set1 set2
# Объединение множеств
SUNION set1 set2
# Разность множеств
SDIFF set1 set2
# Сохранить результат в новом множестве
SINTERSTORE result set1 set2

Утилиты для множеств: SMOVE / SSCAN

Расширенное манипулирование множествами и сканирование.

# Переместить элемент между множествами
SMOVE source_set dest_set "element"
# Инкрементное сканирование множества
SSCAN myset 0 MATCH "a*" COUNT 10

Операции с хэшами

Хэши хранят пары поле-значение, похожие на мини-объекты JSON или словари.

Базовые операции с хэшами: HSET / HGET

Установка и получение отдельных полей хэша.

# Установить поле хэша
HSET user:123 name "John Doe" age 30
# Получить поле хэша
HGET user:123 name
# Установить несколько полей
HMSET user:123 email "john@example.com" city "NYC"
# Получить несколько полей
HMGET user:123 name age email

Просмотр хэша: HKEYS / HVALS

Проверка структуры и содержимого хэша.

# Получить все имена полей
HKEYS user:123
# Получить все значения
HVALS user:123
# Получить все поля и значения
HGETALL user:123
# Получить количество полей
HLEN user:123

Утилиты для хэшей: HEXISTS / HDEL

Проверка существования и удаление полей хэша.

# Проверить существование поля
HEXISTS user:123 email
# Удалить поля
HDEL user:123 age city
# Увеличить поле хэша
HINCRBY user:123 age 1
# Увеличить на число с плавающей точкой
HINCRBYFLOAT user:123 balance 10.50

Сканирование хэша: HSCAN

Инкрементная итерация по большим хэшам.

# Сканировать поля хэша
HSCAN user:123 0
# Сканировать с сопоставлением по шаблону
HSCAN user:123 0 MATCH "addr*" COUNT 10

Операции с отсортированными множествами

Отсортированные множества сочетают уникальность множеств с упорядочиванием на основе баллов (scores).

Базовые операции: ZADD / ZRANGE

Добавление членов с баллами и получение диапазонов.

# Добавить членов с баллами
ZADD leaderboard 100 "player1" 200 "player2"
# Получить членов по рангу (с 0-й индексацией)
ZRANGE leaderboard 0 -1
# Получить с баллами
ZRANGE leaderboard 0 -1 WITHSCORES
# Получить по диапазону баллов
ZRANGEBYSCORE leaderboard 100 200

Информация об отсортированном множестве: ZCARD / ZSCORE

Получение информации о членах отсортированного множества.

# Получить размер множества
ZCARD leaderboard
# Получить балл члена
ZSCORE leaderboard "player1"
# Получить ранг члена
ZRANK leaderboard "player1"
# Подсчет членов в диапазоне баллов
ZCOUNT leaderboard 100 200

Модификации: ZREM / ZINCRBY

Удаление членов и изменение баллов.

# Удалить членов
ZREM leaderboard "player1"
# Увеличить балл члена
ZINCRBY leaderboard 10 "player2"
# Удалить по рангу
ZREMRANGEBYRANK leaderboard 0 2
# Удалить по баллу
ZREMRANGEBYSCORE leaderboard 0 100

Расширенные: ZUNIONSTORE / ZINTERSTORE

Объединение нескольких отсортированных множеств.

# Объединение отсортированных множеств
ZUNIONSTORE result 2 set1 set2
# Пересечение с весами
ZINTERSTORE result 2 set1 set2 WEIGHTS 1 2
# С функцией агрегации
ZUNIONSTORE result 2 set1 set2 AGGREGATE MAX

Управление ключами

Просмотр ключей: KEYS / EXISTS

Поиск ключей по шаблонам и проверка их существования.

# Получить все ключи (использовать осторожно в продакшене)
KEYS *
# Ключи с шаблоном
KEYS user:*
# Ключи, оканчивающиеся на шаблон
KEYS *:profile
# Одиночный подстановочный знак
KEYS order:?
# Проверить, существует ли ключ
EXISTS mykey

Информация о ключе: TYPE / TTL

Получение метаданных ключа и информации об истечении срока действия.

# Получить тип данных ключа
TYPE mykey
# Получить время жизни (в секундах)
TTL mykey
# Получить TTL в миллисекундах
PTTL mykey
# Удалить срок действия
PERSIST mykey

Операции с ключами: RENAME / DEL

Переименование, удаление и перемещение ключей.

# Переименовать ключ
RENAME oldkey newkey
# Переименовать, только если новый ключ не существует
RENAMENX oldkey newkey
# Удалить ключи
DEL key1 key2 key3
# Переместить ключ в другую базу данных
MOVE mykey 1

Срок действия: EXPIRE / EXPIREAT

Установка времени истечения срока действия ключей.

# Установить срок действия в секундах
EXPIRE mykey 3600
# Установить срок действия в определенный момент времени (timestamp)
EXPIREAT mykey 1609459200
# Установить срок действия в миллисекундах
PEXPIRE mykey 60000

Управление базами данных

Выбор базы данных: SELECT / FLUSHDB

Управление несколькими базами данных в Redis.

# Выбрать базу данных (по умолчанию 0-15)
SELECT 0
# Очистить текущую базу данных
FLUSHDB
# Очистить все базы данных
FLUSHALL
# Получить размер текущей базы данных
DBSIZE

Информация о сервере: INFO / PING

Получение статистики сервера и проверка подключения.

# Проверить соединение с сервером
PING
# Получить информацию о сервере
INFO
# Получить конкретный раздел информации
INFO memory
INFO replication
# Получить время сервера
TIME

Персистентность: SAVE / BGSAVE

Управление персистентностью данных и резервным копированием Redis.

# Синхронное сохранение (блокирует сервер)
SAVE
# Сохранение в фоновом режиме (неблокирующее)
BGSAVE
# Получить время последнего сохранения
LASTSAVE
# Перезапись AOF файла
BGREWRITEAOF

Конфигурация: CONFIG GET / CONFIG SET

Просмотр и изменение конфигурации Redis.

# Получить всю конфигурацию
CONFIG GET *
# Получить конкретную конфигурацию
CONFIG GET maxmemory
# Установить конфигурацию
CONFIG SET timeout 300
# Сбросить статистику
CONFIG RESETSTAT

Мониторинг производительности

Мониторинг в реальном времени: MONITOR / SLOWLOG

Отслеживание команд и выявление узких мест производительности.

# Мониторинг всех команд в реальном времени
MONITOR
# Получить журнал медленных запросов
SLOWLOG GET 10
# Получить длину журнала медленных запросов
SLOWLOG LEN
# Сбросить журнал медленных запросов
SLOWLOG RESET

Анализ памяти: MEMORY USAGE / MEMORY STATS

Анализ потребления памяти и оптимизация.

# Получить использование памяти ключом
MEMORY USAGE mykey
# Получить статистику памяти
MEMORY STATS
# Получить отчет "врача" памяти
MEMORY DOCTOR
# Очистить память
MEMORY PURGE

Информация о клиентах: CLIENT LIST

Мониторинг подключенных клиентов и соединений.

# Список всех клиентов
CLIENT LIST
# Получить информацию о клиенте
CLIENT INFO
# Завершить соединение клиента
CLIENT KILL ip:port
# Установить имя клиента
CLIENT SETNAME "my-app"

Бенчмаркинг: redis-benchmark

Тестирование производительности Redis с помощью встроенного инструмента бенчмаркинга.

# Базовый бенчмарк
redis-benchmark
# Конкретные операции
redis-benchmark -t SET,GET -n 100000
# Размер полезной нагрузки
redis-benchmark -d 1024 -t SET -n 10000

Расширенные функции

Транзакции: MULTI / EXEC

Атомарное выполнение нескольких команд.

# Начать транзакцию
MULTI
SET key1 "value1"
INCR counter
# Выполнить все команды
EXEC
# Отменить транзакцию
DISCARD
# Наблюдать за ключами на предмет изменений
WATCH mykey

Pub/Sub: PUBLISH / SUBSCRIBE

Реализация обмена сообщениями между клиентами.

# Подписаться на канал
SUBSCRIBE news sports
# Опубликовать сообщение
PUBLISH news "Breaking: Redis 7.0 released!"
# Подписка по шаблону
PSUBSCRIBE news:*
# Отписаться
UNSUBSCRIBE news

Скриптинг Lua: EVAL / SCRIPT

Атомарное выполнение пользовательских скриптов Lua.

# Выполнить скрипт Lua
EVAL "return redis.call('SET', 'key', 'value')" 0
# Загрузить скрипт и получить SHA
SCRIPT LOAD "return redis.call('GET', KEYS[1])"
# Выполнить по SHA
EVALSHA sha1 1 mykey
# Проверить существование скрипта
SCRIPT EXISTS sha1

Потоки (Streams): XADD / XREAD

Работа с потоками Redis для данных типа журнала.

# Добавить запись в поток
XADD mystream * field1 value1 field2 value2
# Читать из потока
XREAD STREAMS mystream 0
# Получить длину потока
XLEN mystream
# Создать группу потребителей
XGROUP CREATE mystream mygroup 0

Обзор типов данных

Строки (Strings): Самый универсальный тип

Могут хранить текст, числа, JSON, двоичные данные. Максимальный размер: 512 МБ. Использовать для: кэширования, счетчиков, флагов.

SET user:123:name "John"
GET user:123:name
INCR page:views

Списки (Lists): Упорядоченные коллекции

Связные списки строк. Использовать для: очередей, стеков, лент активности, недавних элементов.

LPUSH queue:jobs "job1"
RPOP queue:jobs
LRANGE recent:posts 0 9

Множества (Sets): Уникальные коллекции

Неупорядоченные коллекции уникальных строк. Использовать для: тегов, уникальных посетителей, отношений.

SADD post:123:tags "redis" "database"
SISMEMBER post:123:tags "redis"
SINTER user:123:friends user:456:friends

Советы по конфигурации Redis

Управление памятью

Настройка лимитов памяти и политик вытеснения.

# Установить лимит памяти
CONFIG SET maxmemory 2gb
# Установить политику вытеснения
CONFIG SET maxmemory-policy allkeys-lru
# Проверить использование памяти
INFO memory

Настройки персистентности

Настройка параметров надежности данных.

# Включить AOF
CONFIG SET appendonly yes
# Установить интервалы сохранения
CONFIG SET save "900 1 300 10 60 10000"
# Настройки перезаписи AOF
CONFIG SET auto-aof-rewrite-percentage 100

Настройки безопасности

Базовые настройки безопасности для Redis.

# Установить пароль
CONFIG SET requirepass mypassword
# Аутентификация
AUTH mypassword
# Отключить опасные команды
CONFIG SET rename-command FLUSHALL ""
# Установить таймаут
CONFIG SET timeout 300
# TCP keep alive
CONFIG SET tcp-keepalive 60
# Максимальное количество клиентов
CONFIG SET maxclients 10000

Настройка производительности

Оптимизация Redis для лучшей производительности.

# Включить конвейеризацию (pipelining) для нескольких команд
# Использовать пулинг соединений
# Настроить соответствующую политику maxmemory-policy
# Регулярно отслеживать медленные запросы
# Использовать подходящие структуры данных для сценариев использования

Связанные ссылки