digitalization-2025-10/redis.md

174 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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) можно добавить позже по мере необходимости.