Skip to content

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
  1. Change bind from 127.0.0.1 to 0.0.0.0
bind 0.0.0.0
  1. Uncomment # requirepass and add a strong password.
requirepass <strong password>
  1. Change notify-keyspace-events to 'KA' as we listen to keyspance event. Reference: Redis Notification
notify-keyspace-events "KA"
  1. Restart
sh
sudo systemctl restart redis.service
  1. 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