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