Redis — это база данных, размещаемая в памяти, которая используется, в основном, в роли кеша, находящегося перед другой, "настоящей" базой данных, вроде MySQL или PostgreSQL. Может использоваться в реализациях механизма издатель/подписчик, в задачах потоковой обработки данных, в системах, где нужно работать с очередями. Вот какие типы данных поддерживает Redis:
- Строка (String)
- Битовый массив (Bitmap)
- Битовое поле (Bitfield)
- Хеш-таблица (Hash)
- Список (List)
- Множество (Set)
- Упорядоченное множество (Sorted set)
- Геопространственные данные (Geospatial)
- Структура HyperLogLog (HyperLogLog)
- Поток (Stream)
Memcached может показывать отличные результаты производительности в ограниченных окружениях кеширования. А при использовании этой системы в распределённом кластере нужны дополнительные настройки. Redis же поддерживает подобные сценарии работы сразу после установки. Можно распределить хранимые данные по множеству машин. Это называют шардингом. В результате каждый экземпляр Redis, входящий в состав кластера, считается хранилищем шарда, или фрагмента, всех данных.
Установка Redis в Linux
root@v:/etc# apt install redis .... Created symlink /etc/systemd/system/redis.service → /usr/lib/systemd/system/redis-server.service. Created symlink /etc/systemd/system/multi-user.target.wants/redis-server.service → /usr/lib/systemd/system/redis-server.service. root@v:/etc# systemctl status redis ● redis-server.service - Advanced key-value store Loaded: loaded (/usr/lib/systemd/system/redis-server.service; enabled; pre> Active: active (running) since Sun 2024-12-22 18:03:25 +05; 2min 2s ago Docs: http://redis.io/documentation, man:redis-server(1) Main PID: 1307637 (redis-server) Status: "Ready to accept connections" Tasks: 5 (limit: 13882) Memory: 4.1M (peak: 5.0M) CPU: 226ms CGroup: /system.slice/redis-server.service └─1307637 "/usr/bin/redis-server 127.0.0.1:6379"
port 6379
Нагрузочный тест:
$ redis-benchmark -h localhost -p 6379 -n 100000 -c 50 -d 100
...
Summary:
throughput summary: 62111.80 requests per second
latency summary (msec):
avg min p50 p95 p99 max
0.427 0.112 0.423 0.503 0.559 0.895
Эта команда симулирует 50 клиентов (параметр -c 50), выполняющих 100 000 запросов (-n 100 000). Результаты отображают время ответа в миллисекундах.
Установка клиента
sudo apt install redis-tools
Конфигурация /etc/redis/redis.conf:
bind 0.0.0.0 ::1 protected-mode yes port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes supervised systemd pidfile /var/run/redis_6379.pid loglevel notice logfile /var/log/redis/redis-server.log databases 16 maxmemory 16gb maxmemory-policy volatile-lru maxmemory-samples 5 activerehashing yes active-defrag-ignore-bytes 100mb active-defrag-threshold-lower 10 active-defrag-threshold-upper 100 active-defrag-cycle-min 5 active-defrag-cycle-max 75 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /var/lib/redis/ appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-backlog-size 256mb repl-backlog-ttl 3600 repl-timeout 60 requirepass pass rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command CONFIG "" maxclients 10000 client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 512mb 128mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes latency-monitor-threshold 100
Проверка подключения:
redis-cli -h v
(v - IP-адрес сервера)