Redis
Installation
bash
sudo yum install epel-release
sudo yum install redis -y
sudo systemctl start redis.service
sudo systemctl enable redis
Check service status
sh
$ sudo systemctl status redis.service
● redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Wed 2021-06-16 13:12:31 UTC; 44s ago
Main PID: 16976 (redis-server)
CGroup: /system.slice/redis.service
└─16976 /usr/bin/redis-server 127.0.0.1:6379
Jun 16 13:12:31 ip-172-31-36-99.ap-southeast-1.compute.internal systemd[1]: Starting Redis persistent key-value database...
Jun 16 13:12:31 ip-172-31-36-99.ap-southeast-1.compute.internal systemd[1]: Started Redis persistent key-value database.
$ ps -f -u redis
UID PID PPID C STIME TTY TIME CMD
redis 16976 1 0 13:12 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6379
Test redis
sh
redis-cli ping
Configure
sh
sudo vi /etc/redis.conf
- Change bind from 127.0.0.1 to 0.0.0.0
bind 0.0.0.0
- Uncomment # requirepass and add a strong password.
requirepass <strong password>
- Change notify-keyspace-events to 'KA' as we listen to keyspance event. Reference: Redis Notification
notify-keyspace-events "KA"
- Restart
sh
sudo systemctl restart redis.service
- Test
sh
$ redis-cli
127.0.0.1:6379> set key1 10
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth <password>
OK
127.0.0.1:6379> set key1 10
OK
127.0.0.1:6379> get key1 10
"10"
127.0.0.1:6379> quit
Heroku
If you are using heroku redis, issue command below to change notify-key-events
sh
heroku redis:keyspace-notifications -c KA --remote <remote server>
Firewall
fireall-cmd
bash
sudo firewall-cmd --permanent --new-zone=redis
sudo firewall-cmd --permanent --zone=redis --add-port=6379/tcp
# if required
sudo firewall-cmd --permanent --zone=redis --add-source=client_server_private_IP
sudo firewall-cmd --reload
iptables
bash
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 6379 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP
Other references
[Configure redis on google compute machine] https://cloud.google.com/community/tutorials/setting-up-redis
#Debian
sh
sudo apt-get update
sudo apt-get -y install redis-server
cd /etc/redis
sudo vi redis.conf
sudo service redis-server restart
#redis docker redis-stack.conf
bash
port 6379
daemonize yes
notify-keyspace-events "KA"
sudo docker run -v ./data:/data -v ./conf/redis-stack.conf:/redis-stack.conf -p 6379:6379 -p 8001:8001 -d --name redis-server redis/redis-stack:latest
docker-compose.yaml
yaml
version: '3.3'
services:
redis:
image: redis/redis-stack:latest
container_name: redis-server
restart: unless-stopped
deploy:
resources:
limits:
memory: 2G
logging:
options:
max-size: "10m"
max-file: "3"
# join same network if available, else create bridges
# network_mode: bridge
# either one
networks:
app-network:
ipv4_address: 172.18.88.80
# user: "${UID}:${GID}"
ports:
- "6379:6379"
- "8001:8001"
environment:
TZ: Asia/Kuala_Lumpur
volumes:
# include all the file in /usr/src/app
- ./data:/data
- ./conf/redis-stack.conf:/redis-stack.conf
# Join external network
networks:
app-network:
name: app-network
external: true