174 lines
5.0 KiB
Markdown
174 lines
5.0 KiB
Markdown
# Redis в Docker: установка и базовые команды
|
||
|
||
Краткая инструкция по запуску Redis в Docker и использованию `redis-cli`.
|
||
|
||
## Установка/запуск Redis в Docker
|
||
|
||
- Запустить Redis (порт 6379):
|
||
```bash
|
||
docker run -d --name redis -p 6379:6379 redis:7
|
||
```
|
||
|
||
- Перезапуск/остановка/удаление:
|
||
```bash
|
||
docker restart redis
|
||
```
|
||
```bash
|
||
docker stop redis
|
||
```
|
||
```bash
|
||
docker rm -f redis
|
||
```
|
||
|
||
## Подключение к Redis
|
||
|
||
- Из контейнера (встроенный `redis-cli`):
|
||
```bash
|
||
docker exec -it redis redis-cli
|
||
```
|
||
|
||
- С хоста (если установлен `redis-cli`):
|
||
```bash
|
||
redis-cli -h 127.0.0.1 -p 6379
|
||
```
|
||
|
||
- Проверка доступности:
|
||
```bash
|
||
redis-cli -h 127.0.0.1 -p 6379 PING
|
||
# Ответ: PONG
|
||
```
|
||
|
||
## Базовые команды (ключ-значение)
|
||
|
||
```redis
|
||
# Имена скважин
|
||
SET well:1001:name "Well-1001"
|
||
GET well:1001:name
|
||
|
||
# Счетчики добычи (баррели нефти)
|
||
SETNX counters:production:well:1001:bbl 0
|
||
INCR counters:production:well:1001:bbl
|
||
INCRBY counters:production:well:1001:bbl 250
|
||
DECR counters:production:well:1001:bbl
|
||
|
||
# Массовая запись/чтение параметров месторождения
|
||
MSET field:permian:name Permian field:permian:country USA field:permian:type oil
|
||
MGET field:permian:name field:permian:country field:permian:type
|
||
|
||
# Удаление и проверка существования
|
||
DEL field:permian:type
|
||
EXISTS well:1001:name
|
||
TTL counters:production:well:1001:bbl
|
||
```
|
||
|
||
## Время жизни/истечение
|
||
|
||
```redis
|
||
# Кэш телеметрии датчика давления (истекает через 5 минут)
|
||
SET sensor:well:1001:pressure:psi "2850" EX 300
|
||
|
||
# Продлить TTL еще на 60 секунд
|
||
EXPIRE sensor:well:1001:pressure:psi 60
|
||
|
||
# Сделать запись постоянной
|
||
PERSIST sensor:well:1001:pressure:psi
|
||
```
|
||
|
||
## Поиск ключей и очистка
|
||
|
||
```redis
|
||
KEYS well:*
|
||
```
|
||
|
||
## Структуризация команд
|
||
|
||
### 1) Простые типы: строки и числа
|
||
|
||
```redis
|
||
# Строки состояния
|
||
SET well:1001:status "online"
|
||
GET well:1001:status
|
||
|
||
# Множественная запись паспортных данных скважины
|
||
MSET well:1001:field Permian well:1001:type oil well:1001:depth_m 3200
|
||
MGET well:1001:field well:1001:type well:1001:depth_m
|
||
|
||
# Только если ключ не существует (инициализация счетчика газа, тыс. куб. футов)
|
||
SETNX counters:gas:well:1001:mcf 0
|
||
|
||
# Инкременты/декременты
|
||
INCR counters:gas:well:1001:mcf
|
||
INCRBY counters:gas:well:1001:mcf 500
|
||
DECR counters:gas:well:1001:mcf
|
||
|
||
# Полезное: журнал операций
|
||
APPEND ops:log "start_pump;"
|
||
STRLEN ops:log
|
||
GETSET last:ops:timestamp "2025-10-28T10:00:00Z"
|
||
DEL ops:log well:1001:status
|
||
EXISTS counters:gas:well:1001:mcf
|
||
```
|
||
|
||
### 2) Списки (queues/стэки)
|
||
|
||
```redis
|
||
# Очередь работ по обслуживанию
|
||
LPUSH jobs:maintenance well:1001:inspect well:1002:replace_valve
|
||
RPUSH jobs:maintenance well:1003:calibrate_sensor
|
||
|
||
# Изъятие задач
|
||
LPOP jobs:maintenance
|
||
RPOP jobs:maintenance
|
||
|
||
# Диапазон и метаданные
|
||
LRANGE jobs:maintenance 0 -1
|
||
LLEN jobs:maintenance
|
||
LINDEX jobs:maintenance 0
|
||
|
||
# Блокирующие операции (ожидание новой задачи)
|
||
BLPOP jobs:maintenance 5
|
||
BRPOP jobs:maintenance 5
|
||
|
||
# Удаление конкретной задачи
|
||
LREM jobs:maintenance 0 well:1002:replace_valve
|
||
```
|
||
|
||
### 3) Хэши (похожие на объекты)
|
||
|
||
```redis
|
||
# Паспорт скважины
|
||
HSET well:1001 name "Well-1001" field "Permian" status "online" depth_m 3200
|
||
HGET well:1001 name
|
||
HMGET well:1001 field status depth_m
|
||
HGETALL well:1001
|
||
|
||
# Управление полями
|
||
HDEL well:1001 status
|
||
HEXISTS well:1001 field
|
||
HLEN well:1001
|
||
|
||
# Счетчики в хэше (например, количество запусков насоса)
|
||
HINCRBY well:1001 metrics:pump_starts 1
|
||
```
|
||
|
||
### 4) Множества (уникальные элементы, без порядка)
|
||
|
||
```redis
|
||
# Скважины по месторождениям
|
||
SADD field:permian:wells 1001 1002
|
||
SADD field:west_siberia:wells 1002 1003
|
||
SMEMBERS field:permian:wells
|
||
SCARD field:west_siberia:wells
|
||
|
||
# Операции множеств (пересечения/объединения между полями)
|
||
SUNION field:permian:wells field:west_siberia:wells # 1001 1002 1003
|
||
SINTER field:permian:wells field:west_siberia:wells # 1002
|
||
SDIFF field:permian:wells field:west_siberia:wells # 1001
|
||
|
||
# Теги оборудования на скважине
|
||
SADD well:1001:tags oil onshore artificial_lift
|
||
SISMEMBER well:1001:tags oil
|
||
```
|
||
|
||
> Примечание: отсортированные множества (ZSET) и другие структуры (Streams, Bitmaps, HyperLogLog) можно добавить позже по мере необходимости.
|