Опис
Загальна інформація
Redis – це документо-орієнтовна база даних, яка має розподілене сховище пар ключ-значення які зберігаються в оперативній пам’яті, з можливістю довговічного зберігання даних. Має відкритий сирцевий код, може використовуватись в якості кеша, бази даних або брокера повідомлень. Данні зберігаються в багаторівневих структурах даних, нижче коротко розглянемо декілька з них:
- рядки (strings) основний з базових типів даних, можуть використовуватись як числа тільки обмежені розміром 512Mb
- хеш-таблиці (hashes) класичні хеш-таблиці, максимальна кількість елементі може бути 232 — 1.
- списки (lists) списки рядків, які упорядковані (сортовані) в порядку додавання. Додавання можливе як на початку, так і в кінці списку.
- множини (sets) в математичному розумінні — це не упорядковані рядки, які підтримують операції додавання, перевірки додавання елементів, перетину та різниці множин.
- впорядковані множини (sorted sets) вагома відмінність від просто множин це особливий параметр “score” який упорядковує по своєму. Кожен елемент рядка зв’язаний з плаваючим числом. Сортуються елементи по їх балах, що дозволяє отримати ряд елементів.
Детальніше про типи даних в redis краще почитати в офф документації тут В більшості випадків redis використовують в ролі кешуючого сервера, для чого він ідеально підходить. Альтернативою або й колегою с редіса є memcache.
Особливості
Варто звернути увагу і на особливості redis:
- підтримує черги, транзакції, різні типи даних;
- підтримує кластеризація (починаючи з версії 3.0 RC) та реплікацію master-slave;
- у разі потреби використовується як постійне сховище даних;
- продуктивніший ніж його колега memcache;
- дозволяє зберігати в значеннях до 512 Mb;
- підтримує резервне копіювання даних в режимі master-slave;
- зберігає данні в пам’яті або на диску, може використовувати їх після перезапуску;
Після короткого ознайомлення, переходимо до підготовки та встановлення.
Інсталяція
Розглянемо можливості встановлення:
- завантажити з офф сайту та зібрати з вихідного коду;
- завантажити та встановити використовуючи deb або rpm пакети;
- підняти в docker;
- використати сторонні репозиторії для встановлення;
- скористатися хмарними рішеннями від популярних провайдерів або самого редіса (AmazonElastickCache, AmazonMemoryDB, GCP_MemoryStore, RedisCloud);
Редіс підтримує безліч платформ, та продуктивність його залежатиме від обсягу оперативної пам’яті сервера. В моєму випадку інсталяцію проводитиму на Centos 7 використовуючи репозиторій remi.
Підготовка
Всі маніпуляції проводимо під root або від суперкористувача! Спочатку додамо та активуємо репозиторій remi:
[root@redis ~]# rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
за замовчуванням репозиторій після додавання не активований, необхідно його активувати:
[root@redis ~]# yum-config-manager --enable remi
спробуємо отримати інформацію про redis:
[root@redis ~]# yum info redis Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: download.cf.centos.org * epel: d2lzkl7pfhq30w.cloudfront.net * extras: download.cf.centos.org * remi: mirror.23m.com * remi-safe: mirror.23m.com * updates: download.cf.centos.org Installed Packages Name : redis Arch : x86_64 Version : 6.2.6 Release : 1.el7.remi Size : 4.3 M Repo : installed From repo : remi Summary : A persistent key-value database URL : http://redis.io License : BSD
з репозиторію доступна остання стабільна версія, переходимо до процесу встановлення.
Встановлення
встановлюємо redis використовуючи yum:
[root@redis ~]# yum install redis
далі потрібно активувати й запустити сервіс:
[root@redis ~]# systemctl enable redis && systemctl start redis
перевіряємо статус:
[root@redis ~]# systemctl status redis ● redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled) Drop-In: /etc/systemd/system/redis.service.d └─limit.conf Active: active (running) since Wed 2022-03-16 17:47:51 UTC; 1 day 10h ago Main PID: 21406 (redis-server) Status: "Ready to accept connections" CGroup: /system.slice/redis.service └─21406 /usr/bin/redis-server 127.0.0.1:6379
редіс запущено, доступний він на 6379 порту. Залишилося перевірити вірність встановлення, використовуємо для цього redis-cli:
[root@redis ~]# redis-cli ping [root@redis ~]# PONG
якщо ви не отримали у відповідь PONG це означає що щось не так і сервер не готовий до роботи.
Налаштування доступу й аутентифікації
Варто не забувати про firewall, необхідно відкрити 6379 порт на вашому firewall або в sg.
Залишилося найцікавіше, внести налаштування доступу й аутентифікації в конфігураційний файл редісу, який знаходиться в /etc/redis/redis.conf. Маємо декілька варіантів:
- повністю очистити конфігураційний файл і заповнити його необхідними параметрами з офф документації тут. Це зробить файл структурованим і прибере зайві коментарі та довгі описи до параметрів;
- залишити файл і додати або прибрати необхідні параметри;
Для початку дозволимо підключення до редісу з певних хостів і додамо аутентифікацію по паролю. В конфігураційному файлі необхідно знайти рядок bind і додати IP адреси з яких дозволено підключення:
################################## NETWORK ##################################### # By default, if no "bind" configuration directive is specified, Redis listens # for connections from all available network interfaces on the host machine. # It is possible to listen to just one or multiple selected interfaces using # the "bind" configuration directive, followed by one or more IP addresses. # Each address can be prefixed by "-", which means that redis will not fail to # start if the address is not available. Being not available only refers to # addresses that does not correspond to any network interfece. Addresses that # are already in use will always fail, and unsupported protocols will always BE # silently skipped. # # Examples: # # bind 192.168.1.100 10.0.0.1 # listens on two specific IPv4 addresses # bind 127.0.0.1 ::1 # listens on loopback IPv4 and IPv6 # bind * -::* # like the default, all available interfaces # # ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the # internet, binding to all the interfaces is dangerous and will expose the # instance to everybody on the internet. So by default we uncomment the # following bind directive, that will force Redis to listen only on the # IPv4 and IPv6 (if available) loopback interface addresses (this means Redis # will only be able to accept client connections from the same host that it is # running on). # # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES # JUST COMMENT OUT THE FOLLOWING LINE. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bind 0.0.0.0
якщо необхідно щоб з будь-якого хоста була змога підключення, в рядку bind необхідно додати 0.0.0.0.
Для встановлення паролю шукаємо рядок requirepass, розкоментуємо його і додамо пароль:
# IMPORTANT NOTE: starting with Redis 6 "requirepass" is just a compatibility # layer on top of the new ACL system. The option effect will be just setting # the password for the default user. Clients will still authenticate using # AUTH <password> as usually, or more explicitly with AUTH default <password> # if they follow the new protocol: both will work. # # The requirepass is not compatable with aclfile option and the ACL LOAD # command, these will cause requirepass to be ignored. # requirepass SomePowerFull#StrongPassword
після цього перезапускаємо сервіс redis:
[root@redis ~]# systemctl restart redis.service
перевіряємо роботу паролю, підключаємось:
[root@redis ~]# redis-cli 127.0.0.1:6379> ping (error) NOAUTH Authentication required. 127.0.0.1:6379>
авторизуємось і ще раз повторюємо:
127.0.0.1:6379> AUTH SomePowerFull#StrongPassword OK 127.0.0.1:6379> ping PONG 127.0.0.1:6379>
для того, щоб вийти з редісу використовуємо команду exit or quit.
На цьому встановлення та базове налаштування завершено, надалі планується детальніше розглянути можливості, типи даних та роботу з redis-cli.