安裝Redis完整過程

安裝Redis


希望將Redis安裝在此目錄下:

/usr/local/redis

參考http://redis.io/download的安裝說明,做調整:

$ mkdir /usr/local/redis
$ cd /usr/local/src
$ wget http://download.redis.io/releases/redis-2.6.14.tar.gz
$ tar xzf redis-2.6.14.tar.gz 
$ ln -s redis-2.6.14 redis #建立一個鏈接
$ cd redis
$ make PREFIX=/usr/local/redis install #安裝到指定目錄中

可能遇到的錯誤,解決如下:

>>提示1:
make[3]: gcc:命令未找到
>>解決
yum -y install gcc-c++
>>提示2:
在包含自 adlist.c:34 的文件中:
zmalloc.h:50:31: 錯誤:jemalloc/jemalloc.h:沒有那個文件或目錄
zmalloc.h:55:2: 錯誤:#error "Newer version of jemalloc required"
>> 解決
make的時候加上 MALLOC=libc 參數
make PREFIX=/data/apps/redis2.6.14 MALLOC=libc install

注意上面的最後一行,我們通過PREFIX指定了安裝的目錄。如果make失敗,一般是你們系統中還未安裝gcc,那麼可以通過yum安裝之:

yum install gcc  

安裝完成後,則執行make.

在安裝redis成功後,你將可以在/usr/local/redis看到一個bin的目錄,裏面包括了以下文件:

redis-benchmark  
redis-check-aof  
redis-check-dump  
redis-cli  
redis-server

Redis做成一個服務

1.複製腳本到/etc/rc.d/init.d目錄

按以上步驟安裝Redis時,其服務腳本位於:

/usr/local/src/redis/utils/redis_init_script

必須將其複製到/etc/rc.d/init.d的目錄下:

cp /usr/local/src/redis/utils/redis_init_script /etc/rc.d/init.d/redis
以下將redis_init_script複製到/etc/rc.d/init.d/,同時易名爲redis

如果這時,我們直接註冊服務:

chkconfig --add redis

將報以下錯誤:

redis服務不支持chkconfig


爲些,我們需要更改redis的腳本,請看下節說明。


2.更改redis的服務腳本

vim /etc/rc.d/init.d/redis

看到以下的文件內容:

#!/bin/bash   
#chkconfig: 2345 80 90  
# Simple Redis init.d script conceived to work on Linux systems   
# as it does use of the /proc filesystem.   
  
REDISPORT=6379  
EXEC=/usr/local/redis/bin/redis-server   
CLIEXEC=/usr/local/redis/bin/redis-cli   
  
PIDFILE=/var/run/redis_${REDISPORT}.pid   
CONF="/etc/redis/${REDISPORT}.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 &   
        fi   
        ;;   
    stop)   
        if [ ! -f $PIDFILE ]   
        then   
                echo "$PIDFILE does not exist, process is not running"  
        else  
                PID=$(cat $PIDFILE)   
                echo "Stopping ..."  
                $CLIEXEC -p $REDISPORT shutdown   
                while [ -x /proc/${PID} ]   
                do  
                    echo "Waiting for Redis to shutdown ..."  
                    sleep 1  
                done   
                echo "Redis stopped"  
        fi   
        ;;   
    *)   
        echo "Please use start or stop as first argument"  
        ;;   
esac  

1)解決無法註冊的問題:

   原文件是沒有以下第2行的內容的,

#chkconfig: 2345 80 90

這時如果註冊將報錯,要添加再註冊就OK了。
 
   2)更改EXECCLIEXEC參數,設置對應的值,如上所示即和我們前面安裝的一致。

   3)更改redis開啓的命令,以後臺運行的方式執行:

$EXEC $CONF &  

注意後面的那個&,即是將服務轉到後面運行的意思,否則啓動服務時,Redis服務將
佔據在前臺,佔用了主用戶界面,造成其它的命令執行不了。

   4)redis配置文件拷貝到/etc/redis/${REDISPORT}.conf

mkdir /etc/redis    
cp /usr/local/src/redis/redis.conf /etc/redis/6379.conf

這樣redis服務腳本指定的CONF就存在了。默認情況下,Redis未啓用認證,可以通過開啓6379.confrequirepass 指定一個驗證密碼。

 以上操作完成後,即可註冊服務:

chkconfig --add redis   

啓動Redis服務

$ service redis start

Redis的命令所在目錄添加到系統參數PATH

修改profile文件:
#vi /etc/profile
在最後行添加:

export PATH="$PATH:/usr/local/redis/bin"  

然後馬上應用這個文件:

./etc/profile

這樣就可以直接調用redis-cli的命令了,如下所示:

$ redis-cli   
redis 127.0.0.1:6379> auth superman   
OK   
redis 127.0.0.1:6379> ping   
PONG   
redis 127.0.0.1:6379>   

  由於上面我開啓了安全驗證功能,密碼爲superman,因此需要auth後才能和服務器交互。

配置優化:

• 1. Redis默認不是以守護進程的方式運行,可以通過該配置項修改,使用yes啓用守護進程

             daemonize no   --->   daemonize yes

• 2.當 客戶端閒置多長時間後關閉連接,如果指定爲0,表示關閉該功能,單位是毫秒

          timeout 3000

• 3.指定存儲至本地數據庫時是否壓縮數據,默認爲yesRedis採用LZF壓縮,如果爲了節省CPU時間,可以關閉該選項,但會導致數據庫文件變的巨大

         rdbcompression yes ---> rdbcompression no

• 4.設置同一時間最大客戶端連接數,默認無限制,Redis可以同時打開的客戶端連接數爲Redis進程可以打開的最大文件描述符數。當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回max number of clients reached錯誤信息

      #maxclients 10000 ---> maxclients 10000

• 5.指定Redis最大內存限制,Redis在啓動時會把數據加載到內存中,達到最大內存後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理後,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內存,Value會存放在swap

        #maxmemory <bytes> ---> maxmemory <根據服務器自己設定>

• 6.指定是否在每次更新操作後進行日誌記錄,Redis在默認情況下是異步的把數據寫入磁盤,如果不開啓,可能會在斷電時導致一段時間內的數據丟失。因爲 redis本身同步數據文件是按上面save條件來同步的,所以有的數據會在一段時間內只存在於內存中。默認爲no

         appendonly no ---> appendonly yes

• 7.指定本地數據庫存放目錄<可以選擇容量適中,安全的磁盤>

         dir ./   ---> dir /data/redis/data/

• 8.數據備份<主從設置> && 集羣搭建

         slaveof <masterip> <masterport>

• Snapshotting
       快照是默認的持久化方式。這種方式將內存中數據以快照的方式寫入到二進制文件中,默認的文件名爲dump.rdb。可以配置自動做快照持久 化的方式。我們可以配置redisn秒內如果超過mkey被修改就自動做快照,下面是默認的快照保存配置

save 900 1  #900秒內如果超過1key被修改,則發起快照保存
save 300 10 #300秒內容如超過10key被修改,則發起快照保存
save 60 10000

 

• loglevel notice

指定輸出消息的級別

# debug (調試級別,詳細信息,信息量大)
# verbose (詳細信息,信息量較大)
# notice (通知,生產環境推薦)
# warning (錯誤信息警告信息)

• logfile /var/log/redis.log

日誌輸出文件,默認在前端運行的時候此key的默認值是stdout輸出到終端,如果用守護進程運行此keystdout的時候將日誌輸入到/dev/null,如果想記錄日誌,就必須爲其指定logfile位置

logfile /var/log/redis.log




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章