Valmat особистий блог установка redis via t

Про те, як встановити Redis як сервер на Linux і звертатися до нього через Unix.socket

Від рута робимо
mkdir / usr / src / redis
cd / usr / src / redis

Якщо тести пройшли нормально (повинно бути написано щось на зразок цього: "\ o / All tests passed without errors!"), То рухаємося далі

mv. /redis-2.4.4.tar.gz ./redis-2.4.4.tar.gz

cp src / redis-server / usr / local / bin /
cp src / redis-cli / usr / local / bin /

mkdir / etc / redis
mkdir / var / redis

Далі в доці пропонується зробити 'cp utils / redis_init_script /etc/init.d/redis_6379', де 6379 - номер дефолтного порту, але я планую що Redis буде працювати у мене через unix.socket,
тому, буде так (скрізь далі нулик з'являється саме з цієї ж причини):

cp utils / redis_init_script /etc/init.d/redis_0

Тепер потрібно підредагувати конфиг:
nano /etc/init.d/redis_0

Власне, редагування там підлягає тільки номер порту (6-й рядок):
REDISPORT = 6379 -> REDISPORT = 0
Якщо номер порту не міняти, то і редагувати нічого не потрібно.

Але в моєму випадку, оскільки я планую запускати редис через unix socket. то потрібно ще внести кілька змін:
додаємо змінну
UNIXSOCK = / tmp / redis.sock
і вираз '$ CLIEXEC -p $ REDISPORT shutdown' в секції "stop" замінюємо на '$ CLIEXEC -s $ UNIXSOCK shutdown'


Ось що вийшло:

Далі нам потрібно скопіювати файл конфіга:
cp redis.conf /etc/redis/0.conf
І відредагувати його:
nano /etc/redis/0.conf
У ньому змінюємо наступне:

#daemonize no
daemonize yes

#pidfile /var/run/redis.pid
pidfile /var/run/redis_0.pid

#port 6379
port 0

Для мене ніби як не актуально, але про всяк випадок раскоментіл рядок
bind 127.0.0.1

також раскоментіл
unixsocket /tmp/redis.sock
unixsocketperm 755

#loglevel verbose
loglevel warning

#logfile stdout
logfile /var/log/redis_0.log

#databases 16
databases 1

У секції "SNAPSHOTTING" можна поміняти стратегію дампов. Я зробив так:

save 54000 10
save 3600 5000

dir / var / redis / dumps /
dbfilename dump_0.rdb

Оскільки в мережу дивитися мій редис не буде, то реплікацію я в ньому відключив (секція 'REPLICATION'):

# Slave-serve-stale-data yes
slave-serve-stale-data no

Далі, оскільки, як і сказано в конфіги, я оббирав використовувати редис не в якості основної БД, а в якості кеша, то варто встановити maxmemory, що б редис ненароком не зжер всю пам'ять:
# 256 MB
maxmemory 268435456

Оскільки maxmemory встановлений, то потрібно встановити і maxmemory-policy

# Maxmemory-policy volatile-lru
maxmemory-policy volatile-ttl

Вибрав volatile-ttl бо не знаю як працює алгоритм LRU

відключаємо appendfsync
appendfsync no

Все на цьому правки конфіга закінчені.
Для балок ми вказували каталог / var / redis / dumps. Його потрібно не забути створити:

Перевіряємо Чи працює. Перевірити можна так:
запускаємо
/etc/init.d/redis_0 start
потім
redis-cli -s /tmp/redis.sock
redis 127.0.0.1:6379> SET key1 "Test"
OK
redis 127.0.0.1:6379> GET key1
"Test"
redis 127.0.0.1:6379>

Якщо все нормально, то додаємо в автозавантаження:

update-rc.d redis_0 defaults

Оскільки я готовий мірятися з тим, що він не буде дампи себе на диск, то це попередження проигнорирую.
А взагалі рішення бачу таким:
У /etc/sysctl.conf нічого природно не вносимо, але в /etc/init.d/redis_0
У секції старт, перед запуском редису, зберігаємо системне значення overcommit_memory
touch / tmp / overcommit_memory_bfr_redis
chmod 0600 / tmp / overcommit_memory_bfr_redis
cat / proc / sys / vm / overcommit_memory> / tmp / overcommit_memory_bfr_redis
sysctl vm.overcommit_memory = 1
А в секцію стоп, повертаємо системне значення:
OCMSYS = $ (cat / tmp / overcommit_memory_bfr_redis)
sysctl vm.overcommit_memory = $ OCMSYS


PPS overcommit_memory впливає на виділення пам'яті ядром і на роботу OOM Killer. vm.overcommit_memory = 0 - більш безпечний варіант, тому що хто його знає кого гримне OOM Killer, якщо пам'ять скінчиться.
PPPS Якщо tcp сокет влаштовує, а потрібно тільки (можливо задати порт), то в каталозі utils з кодами є скрипт install_server.sh, запуск якого зробить більшу частину брудної роботи описаної вище.

Схожі статті