Описание

Сетевое, журналируемое хранилище типа "ключ-значение".
Довольно высокопроизводительная и надежная бд.
Хранит данные в оперативной памяти, для быстрого доступа и делает снимки\журналирование данных для постоянного и надежного хранения.

========= УСТАНОВКА =========

- готовим систему
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 '{}'
+
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 в режиме реального времени