Описание

Довольно высокопроизводительная и надежная бд.
Хранит данные в оперативной памяти, для быстрого доступа и делает снимки\журналирование данных для постоянного и надежного хранения.
========= УСТАНОВКА =========
- готовим систему
sudo apt-get install make
sudo apt-get update
sudo apt-get install build-essential tcl
- качаем последний redis
wget http://download.redis.io/releases/redis-3.Х.Х.tar.gz
- распаковка
tar xvzf redis-stable.tar.gz
cd redis-3.Х.Х
- сборка и установка
make
cd utils
sudo ./install_server.sh
========= НАСТРОЙКА =========
Файл /etc/redis/redis.conf
- увеличиваем количество соединений для сокета
tcp-backlog 65536
- устанавливаем частоту проверки соединений (помогает обнаруживать мертвые коннекты)
tcp-keepalive 60
- увеличиваем максимальное количество клиентов
maxclients 10000
- выделяем достаточно оперативной памяти (желательно возможный максимум)
maxmemory 1572864000
- подбираем подходящую нам политику отклонения ключей
maxmemory-policy allkeys-lru
- прописываем нужный bind (IP адрес на котором работает redis), чтобы redis был доступен снаружи
bind 0.0.0.0
- выбираем механизм персистентности - aof или rdb. RDB - это снапшоты, AOF - логирование операций. Надо подбирать под себя. Я AOF отключаю
appendonly no
appendfilename -
- чтобы отключить RDB надо закомментировать директивы save в /etc/redis/redis.conf
========= УСКОРЕНИЕ =========
Для ускорения есть 3 варианта:
- отключить создание снапшотов. Тогда все будет только в памяти и не будет никакой персистентности, но зато будет быстро работать.
- сделать репликацию master-slave, где на master будут отключены снапшоты и все будет только в памяти, slave будет все снапшотить. Запись и чтение будут с мастером. Тут есть и скорость и некая персистентность.
- собрать redis-cluster
========= ПЕРЕНОС ДАННЫХ =========
РЕПЛИКАЦИЯ.
Самый простой путь - репликация. Допустим (для примера) старый redis на порт 6379, а новый redis на порту 6480.
$ redis-cli -h localhost -p 6380
> slaveof localhost 6379
> info
...
role:slave
Теперь необходимо подождать (первые данные могут появится в течении пары минут). Если мастер база запоролена, то надо ввести пароль на slave:
$ redis-cli -h localhost -p 6380
> config set masterauth
После копирования всех данных (можно проверить по количеству ключей в info) - отключаем репликацию
> slaveof no one
> info
...
role:master
МИГРАЦИЯ
Работает очень долго.
$redis-cli -h localhost -p 6379 keys '*' | xargs -I '{}' redis-cli -h localhost -p 6379 migrate localhost 6380 "" 0 100000 COPY KEYS '{}'
Ссылки
http://redis.io/
Увеличение производительности Redis с помощью простого кластера
https://habrahabr.ru/post/214131/
Решардинг Redis "наживую"
http://profyclub.ru/docs/169
https://blog.zawodny.com/2011/02/26/redis-sharding-at-craigslist/
Redis Presharding
http://oldblog.antirez.com/post/redis-presharding.html
Установка и настройка Redis Cluster в Debian Wheezy
https://letsclearitup.com.ua/debian/ustanovka-i-nastroyka-redis-cluster-v-debian-wheezy.html
Как оптимизировать Redis-сервер для высокой нагрузки?
https://toster.ru/q/187505
Redis in production
https://habrahabr.ru/post/140893/
https://russianpenguin.ru/2016/02/24/redis-как-скопировать-базу-без-простоя-про/
|
|
+ redis однопоточный, потому не будет гонки при работе с данными |
− redis однопоточный, а значит все запросы идут одним потоком и если есть "жирные запросы", то все остальные запросы будут висеть |
+ redis дает богатый набор типов и возможности управления ими |
− периодически бывает вылетает ошибка Redis server went away, причем вылетает без систематизации и зачастую без какой либо существенной нагрузки на redis |
+ redis может быть персистентным (до какой-то степени), а можно и отключить это все |
− RedisCluster не умеет полноценно работать с KEYS и SCAN, они работают только в рамках одной ноды и одного слота |
+ на простых командах redis очень, очень быстрый |
− при нехватке памяти - redis может упасть, а если ограничить его аппетит через maxmemory, то надо смотреть maxmemory-policy, иначе может начать отдавать ошибки на попытки добавления/изменения данных. |
+ redis репликация и redis cluster из коробки |
− maxmemory-policy больше костыль, так как при его работе - уже есть нехватка памяти и он только указывает какие данные можно удалять, вместо выгрузки из памяти на диск. |
+ вышел redis 4, который решает проблемы с "Redis server went away" |
Отзывы
Сохранить - Ctrl+⏎Enter
Написано:2017-07-24 10:36:06
========= УДАЛЕНИЕ =========
sudo service redis_6379 stop
sudo rm /usr/local/bin/redis-*
sudo rm -r /etc/redis/
sudo rm /var/log/redis_*
sudo rm -r /var/lib/redis/
sudo rm /etc/init.d/redis_*
sudo rm /var/run/redis_*
Перезагрузить сервер.
Написано:2017-07-14 11:01:30
Удаление всех ключей
redis-cli -h 127.0.0.1 -p 6379 KEYS 'ts:*' | xargs redis-cli -h 127.0.0.1 -p 6379 DEL
Написано:2017-07-10 10:47:15
redis> slowlog get 10 - получить первые 10 тормозных запросов
redis> slowlog reset - очистить slowlog
redis> config get * - получить все параметры конфига
redis> config set key value - работает, но не для всех настроек
unix# redis-cli monitor - будет выводить в консоль все команды, которые выполняет redis в режиме реального времени