Redis - Своего рода база данных (NoSQL) работающая с Key-Value структурой (чаще всего, но поддерживаются и иные структуры данных), написан на языке С (Си), является приложением с открытым исходных кодом(BSD licensed). Все данных хранятся в оперативной памяти, что позволяет добиться крайне высокой скорости I/O. Как правило используется в качестве:
Все данные хранятся в оперативной памяти системы, поскольку это исключает обращения к жесткому диску, скорость без преувеличения можно назвать “молниеносной”.
Забегая немного вперед хочется
сказать что redis
содержит в своем “комплекте поставки” redis-benchmark
, запустим тест:
$ redis-benchmark -t set,lpush -n 100000 -q
SET: 74239.05 requests per second
LPUSH: 79239.30 requests per second
redis-benchmark
- Исполняемая команда-t
- SET,lpush
Перечень запускаемых тестов, разделенная запятыми-n
- Количество элементов в тесте-q
- Тихий режим, подавляет output и выводит лишь конечный результат в виде запросов/в секунду
Однако даже тут имеются “узкие места”(В порядке важности):
Redis можно ““размазать” на кластер путем репликации (дублирования) или шардирования (сегментирование), возможно использование двух подходов одновременно что позволяет максимально повысить надежность хранения данных и обеспечить отказоустойчивость, но не стоит забывать о том что каждый из подходов налагает свои минусы:
Replication
- Увеличит скорость операции “Чтение”.
Sharding
- Увеличит скорость операции “Запись”.
В отличие от упрощенных хранилищ на основе пар «ключ – значение», которые поддерживают ограниченный набор структур данных, Redis поддерживает огромное разнообразие структур данных, позволяющее удовлетворить потребности разнообразных приложений. Типы данных Redis включают:
Наиболее простым вариантом “поиграться” с Redis считаю Docker, надеюсь он у вас имеется, если нет, я бы советовал воспользоваться Docker песочницей.
Получаем образ Redis:
~# docker pull redis
...
Status: Downloaded newer image for redis:latest
Запускаем Redis:
~# docker run --rm --name my-redis-name -d redis
Для тех кто не знаком с Docker, немного поясню происходящие:
docker
- Исполняющий файл
run
- Запуск образа который мы скачали в предыдущем шаге
--rm
- После остановки, контейнер будет удален чтобы не “мусорить” системе
--name
- Задаем некое читаемое имя для контейнера, эта информация исключительно для людей и можно записать что угодно
-d
- Просим запустить контейнер в фоне и напечатать нам лишь его ID
Проверим состояние нашего контейнера и убедимся что все работает должным образом:
~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b01a01e4a35 redis "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 6379/tcp my-redis-name
Если вы видите в списке my-redis-name
значит Redis запущен и готов к работе. Далее подключаемся клиентом к нашему
серверу Redis:
~# docker exec -it my-redis-name redis-cli
127.0.0.1:6379>
Несколько команд для примера:
127.0.0.1:6379> set country russia
OK
127.0.0.1:6379> get country
"russia"
127.0.0.1:6379> incr counter
(integer) 1
127.0.0.1:6379> incr counter
(integer) 2
127.0.0.1:6379> get counter
"2"
127.0.0.1:6379>exit
Уточнения думаю тут излишни, так как команды предельно понятны и просты. После выхода из контейнера не забудьте его удалить:
~# docker rm -f my-redis-name
Больше подробностей и информации вы можете найти в оффициальной документации
Думаю в следующих статьях напишу о том как правильно выполнять реплицирование и шардирование и работу с иными структурами данных.