redis – огляд та встановлення на Centos 7

Опис

Загальна інформація

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.

 

 

 

Click to rate this post!
[Total: 0 Average: 0]