Setup and monitor Redis server

Hey, I'm a Web application developer! I'm wondering how to populate the database not only with lowest-cost but also high performance. Redis is a good idea.

Why should you add a Redis server into your system?

The basic model of using Redis is: Application -- Redis -- Database . Redis will store the authenticated data that matched from Main database (Oracle, MySQL ) with a specified expiration. The application will connect to Redis to get cached data first, if keys have expired, connect to database , store new keys into Redis. That will speed up your application most clearly.

How to setup a Redis server?

  • Deploy a Linux server ( CentOS )
  • Install required packages .
  • Install and start Redis
  • Check the redis-server service
  • Tuning Redis database
Install Redis on CentOS

To setup a linux server, I'll go to create a droplet (VPS) on DigitalOcean, the price is nice, only $5/month for a starter like me . I created a droplet using CentOS 6.9, location Singapore . Within 2 minutes, I got access to my redis server. You'll get a 100$ in Digital Ocean account credit, when you create your own server via my referral link : https://nguyenkhaclong.com/digitalocean100

Create a CentOS droplet on DigitalOcean
In the Dashboard , choose Droplet , click Add, then select the OS image
Select your desired location
# Install required Redis packages 
sudo yum install epel-release
sudo yum update
# Install Redis
sudo yum install redis
# Start Redis-server
service redis start

How to monitor the services of Redis server?

To monitor how the redis-server is running, I'll install Redis-stat on Ruby-rail

#Installing Requirements
yum install gcc-c++ patch readline readline-devel zlib zlib-devel -y
yum libyaml-devel libffi-devel openssl-devel make    
yum bzip2 autoconf automake libtool bison iconv-devel sqlite-devel -y

#Install RVM
curl -sSL https://rvm.io/mpapis.asc | gpg --import -
curl -L get.rvm.io | bash -s stable
load the RVM environment
cd /usr/local/rvm/archives/
tar -xvf rvm-1.29.10.tgz
cd rvm-1.29.10
./install
source /etc/profile.d/rvm.sh
rvm reload
Verify Dependencies
rvm requirements run
#Install Ruby
rvm install 2.5
#Install redis-stat
gem install redis-stat
#Monitor Redis Server  daemon
redis-stat 127.0.0.1:6379 --auth=strong-password --verbose --server=8081 5 --daemon
Monitoring Redis services

Launch the monitor website via url : http://your-digitalocean-droplet-IP:8081

Tuning your the services

Base on your server hardware performance ( RAM , CPU , Disks and Networks connection ), try to optimize your Redis configuration as well as possible. Here's the solution that could help your server running more stable.

Tuning kernel for networking

#Tuning kernel for networking
net.core.somaxconn=65535             # up the number of connections per port
vm.overcommit_memory = 1
fs.file-max=100000
#disable hugepage
echo never > /sys/kernel/mm/transparent_hugepage/enabled
#Optimize Redis through configuration file ( /etc/redis/6379.conf )
save 3600 10000
save 900 1000
save 300 100
#disable saving redis to disk ( disable AOF, enable RDB ) 
appendonly no
#limit the number of clients connection
maxclients 10000
#Setup tcp-backlog
tcp_max_syn_backlog
tcp-backlog 65536
#memory usage ( in bytes )
maxmemory = ½  RAMSIZE
#memory release policy
maxmemory-policy volatile-random

Backup and Restore Redis database

To keep the service running 24/7, I'll make a backup script ( call redis_backup.sh ), add it to the crontab.

#!/bin/sh
RedisDIR="/var/lib/redis"
redis-cli << EOF
auth 1322018 #password of Redis
bgsave
EOF
cp $RedisDIR/dump.rdb /root/redis/backup/dump.$(date +%Y%m%d%H%M).rdb

Run redis after server rebooting

sh -c "ulimit -n 100032" &&   redis-server /etc/redis/6379.conf
#add above config to your /etc/rc.local file
or just run the following command
sudo chkconfig --level 2345 redis on

Some basic & useful commands to monitor Redis services

# check total keys
$redis-cli
$127.0.0.1:6379> auth strong-password
$127.0.0.1:6379> DBSIZE
#monitor realtime
$redis-cli
$127.0.0.1:6379> auth strong-password
$127.0.0.1:6379> monitor
#check server info ( memory , CPU, keyspace )
$redis-cli
$127.0.0.1:6379> auth strong-password
$127.0.0.1:6379> info
#find some keys with pattern
$ redis-cli -p 6379 -a "strong-password" --scan --pattern '*keyword*' >/tmp/scan-keyword.txt

Redis's easy to setup , maintain. Redis is faster than SQL by using hashing mechanism. It can withstand failures and provide uninterrupted service. It could deal the popular programming languages

Huy Tran - IT Master