Про те, як встановити 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, запуск якого зробить більшу частину брудної роботи описаної вище.