安裝編譯相關依賴
- CentOS/Fedora
yum install gcc gcc-c++ cmake tcl
下載Redis源碼包
curl -o redis-4.0.10.tar.gz http://download.redis.io/releases/redis-4.0.10.tar.gz
c++
解壓Redis源碼包
tar -xzvf redis-4.0.10.tar.gz
redis
編譯
具體過程:vim
# 進入解壓目錄, 默認在當前目錄 cd redis-4.0.10 # 執行make make # 安裝, 指定目錄 make PREFIX=/usr/local/redis install
Redis配置
# 將配置文件放在/usr/local/redis/etc/下面, 放在/etc/redis/下也能夠 mkdir /usr/local/redis/etc/ # 將解壓目錄中的redis.conf拷貝到/usr/local/redis/etc/下面 cp redis.conf /usr/local/redis/etc/ # 進入redis的執行文件目錄 cd /usr/local/redis/bin/ # 將redis-benchmark, redis-cli, redis-server複製到/usr/bin cp redis-benchmark redis-cli redis-server /usr/bin/
調整內存分配使用方式, 並使其生效:
# 此參數可用的值爲0,1,2 # 0.表示當用戶空間請求更多的內存時,內核嘗試估算出可用的內存 # 1.表示內核容許超量使用內存直到內存用完爲止 # 2.表示整個內存地址空間不能超過swap+(vm.overcommit_ratio)%的RAM值 echo "vm.overcommit_memory=1" >> /etc/sysctl.conf sysctl -p
修改Redis配置和Redis加固
Redis配置
編輯配置文件vim /usr/local/redis/etc/redis.conf
, 將其中的對應內容修改成:bash
# redis以守護進程的方式運行, no表示不以守護進程的方式運行(會佔用一個終端) daemonize yes # 密碼 requirepass password # 綁定ip # bind 127.0.0.1 # 端口 port 7480 # 數據目錄 dir /data/redis # 客戶端閒置多長時間後斷開鏈接,默認爲0關閉此功能 timeout 300 # 設置redis日誌級別,默認級別:notice loglevel verbose # 設置日誌文件的輸出方式,若是以守護進程的方式運行redis 默認:"" # 而且日誌輸出設置爲stdout,那麼日誌信息就輸出到/dev/null裏面去了 logfile stdout
Redis加固
-
綁定127.0.0.1 若是隻是本地通訊, 就確保監聽在本地, 修改配置文件的
bind 127.0.0.1
服務器 -
設置防火牆 若是須要其餘機器訪問,或者設置了slave模式,那就記得加上相應的防火牆設置,命令以下:
iptables -A INPUT -s x.x.x.x -p tcp --dport 6379 -j ACCEPT
app -
認證 添加密碼, 修改配置文件
requirepass asdlkashdkj123123
curl -
低權限帳戶 建立一個redis用戶, 使用這個用戶執行
redis-server
socket
useradd -M -s /sbin/nologin redis setsid sudo -u redis /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf'
Redis啓動腳本
CentOS 6
的service
服務
cp /root/redis-4.0.10/utils/redis_init_script /etc/rc.d/init.d/redis
在文件的開頭#!
的下一行添加vim /etc/rc.d/init.d/redis
:tcp
# chkconfig: 2345 90 10 # description: Redis is a persistent key-value database
若是添加了密碼, 請添加-a password
在$CLIEXEC -a password -p $REDISPORT shutdown
中.ide
再在stop
的;;
後添加:
restart) $0 stop $0 start ;; status) PID=$(cat $PIDFILE) if [ ! -x /proc/${PID} ] then echo 'Redis is not running' else echo "Redis is running ($PID)" fi ;;
例如:
#!/bin/sh # # chkconfig: 2345 90 10 # description: Redis is a persistent key-value database # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. ### BEGIN INIT INFO # Provides: redis_7480 # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Redis data structure server # Description: Redis data structure server. See https://redis.io ### END INIT INFO REDISPORT=7480 EXEC=/usr/local/redis/bin/redis-server CLIEXEC=/usr/local/redis/bin/redis-cli PIDFILE=/var/run/redis_${REDISPORT}.pid CONF="/usr/local/redis/etc/redis.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, Process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF printf "Redis \033[1;32;32mStarted...\033[0m\n" fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, Process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -a password -p $REDISPORT shutdown >> /dev/null 2>&1 while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done printf "Redis \033[1;32;32mStopped...\033[0m\n" fi ;; restart) $0 stop $0 start ;; status) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, Process is not running" exit 6379 fi PID=$(cat $PIDFILE) if [ ! -x /proc/${PID} ] then printf "Redis is \033[1;31;31mnot running\033[0m\n" else printf "Redis is \033[1;32;32mrunning\033[0m ($PID)\n" fi ;; *) echo "Please use start or stop as first argument" ;; esac
# 若是沒報錯的話,說明成功,能夠用 chkconfig --add redis # 啓動redis服務器 service redis start # 開機自啓 chkconfig redis on # 查看是否啓動成功 ps -ef | grep redis
CentOS 7
的systemd
服務
在/usr/lib/systemd/system
目錄下建立redis.service
文件, 權限爲root.root 755
, 輸入如下內容, 將ExecStart
後面的執行路徑修改成本身的路徑:
[Unit] Description=Redis persistent key-value database After=network.target [Service] ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf --daemonize yes ExecStop=/usr/local/redis/bin/redis-cli -a password -p 6379 shutdown User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target
而後建立/usr/libexec/redis-shutdown
文件, 輸入如下內容, 記得將REDIS_CLI
和CONFIG_FILE
修改成本身的路徑:
#!/bin/bash # # Wrapper to close properly redis and sentinel test x"$REDIS_DEBUG" != x && set -x REDIS_CLI=/usr/local/redis/bin/redis-cli # Retrieve service name SERVICE_NAME="$1" if [ -z "$SERVICE_NAME" ]; then SERVICE_NAME=redis fi # Get the proper config file based on service name CONFIG_FILE="/usr/local/redis/etc/$SERVICE_NAME.conf" # Use awk to retrieve host, port from config file HOST=`awk '/^[[:blank:]]*bind/ { print $2 }' $CONFIG_FILE | tail -n1` PORT=`awk '/^[[:blank:]]*port/ { print $2 }' $CONFIG_FILE | tail -n1` PASS=`awk '/^[[:blank:]]*requirepass/ { print $2 }' $CONFIG_FILE | tail -n1` SOCK=`awk '/^[[:blank:]]*unixsocket\s/ { print $2 }' $CONFIG_FILE | tail -n1` # Just in case, use default host, port HOST=${HOST:-127.0.0.1} if [ "$SERVICE_NAME" = redis ]; then PORT=${PORT:-6379} else PORT=${PORT:-26739} fi # Setup additional parameters # e.g password-protected redis instances [ -z "$PASS" ] || ADDITIONAL_PARAMS="-a $PASS" # shutdown the service properly if [ -e "$SOCK" ] ; then $REDIS_CLI -s $SOCK $ADDITIONAL_PARAMS shutdown else $REDIS_CLI -h $HOST -p $PORT $ADDITIONAL_PARAMS shutdown fi
修改/usr/libexec/redis-shutdown
權限, chmod 755 /usr/libexec/redis-shutdown
從新載入systemd
, 掃描新的或有變更的service
, systemctl daemon-reload
開機自啓, systemctl enable redis