redis安裝部署維護備份

redis安裝部署維護備份

環境: Centos 6.5

一、安裝

下載redis最新版源碼包;
如: wget http://download.redis.io/releases/redis-2.6.16.tar.gz
解壓
tar zxvf redis-2.6.16.tar.gz
編譯

進入到解壓開的目錄,執行:make && make install

在make成功以後,會在src目錄下多出一些可執行文件:redis-server,redis-cli等等。

用cp命令複製到usr目錄下運行。

cp redis-server /usr/local/bin/
cp redis-cli /usr/local/bin/

然後新建目錄,存放配置文件

mkdir /etc/redis
mkdir /var/redis
mkdir /var/redis/log
mkdir /var/redis/run
mkdir /var/redis/6379

在redis解壓根目錄中找到配置文件模板,複製到如下位置。

cp redis.conf /etc/redis/6379.conf

通過vim命令修改

daemonize yes
pidfile /var/redis/run/redis_6379.pid
logfile /var/redis/log/redis_6379.log
dir /var/redis/6379

bind 127.0.0.1 #公網要設定爲這個表示只允許本地訪問,,改成0.0.0.0表示可以外網訪問

最後運行redis:

$ redis-server /etc/redis/6379.conf

添加到系統服務並配置開機啓動

進入到redis源碼的utils目錄,執行 ./install_server.sh ,所有選項默認即可。
修改 /etc/init.d/redis_6379 爲 redis : mv /etc/init.d/redis_6379 /etc/init.d/redis

添加到系統服務:chkconfig --add redis
開機啓動:chkconfig redis on

這樣執行 service redis start|restart|stop 就可以控制redis的啓動、重啓、停止了。

注:此配置在centos 6.5 上用的時候有點問題,用下面則可

--redis conf begin-- 
#!/bin/sh
#chkconfig: 345 86 14
#description: Startup and shutdown script for Redis
PROGDIR=/usr/redis #安裝路徑
PROGNAME=redis-server
DAEMON=$PROGDIR/$PROGNAME
CONFIG=/usr/redis.conf
PIDFILE=/var/run/redis.pid
DESC="redis daemon"
SCRIPTNAME=/etc/rc.d/init.d/redisd
start()
{
         if test -x $DAEMON
         then
        echo -e "Starting $DESC: $PROGNAME"
                   if $DAEMON $CONFIG
                   then
                            echo -e "OK"
                   else
                            echo -e "failed"
                   fi
         else
                   echo -e "Couldn't find Redis Server ($DAEMON)"
         fi
}
 
stop()
{
         if test -e $PIDFILE
         then
                   echo -e "Stopping $DESC: $PROGNAME"
                   if kill `cat $PIDFILE`
                   then
                            echo -e "OK"
                   else
                            echo -e "failed"
                   fi
         else
                   echo -e "No Redis Server ($DAEMON) running"
         fi
}
 
restart()
{
    echo -e "Restarting $DESC: $PROGNAME"
    stop
         start
}
 
list()
{
         ps aux | grep $PROGNAME
}
 
case $1 in
         start)
                   start
        ;;
         stop)
        stop
        ;;
         restart)
        restart
        ;;
         list)
        list
        ;;
 
         *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|list}" >&2
        exit 1
        ;;
esac
exit 0


--conf end--

安裝完服務,redis自動啓動,可以用ps命令查看到相關信息:

[root@XXXX utils]# ps -ef | grep redis
root      4554     1  0 10:55 ?        00:00:02 /usr/local/bin/redis-server /etc/redis/6379.conf
root      4564  2808  0 10:59 pts/0    00:00:00 grep redis

2、手動啓動關閉服務
[root@xsf003 utils]# /etc/init.d/redis_6379 stop   #關閉
[root@xsf003 utils]# /etc/init.d/redis_6379 start  #啓動

--- other end---

注意,默認複製過去的redis.conf文件的daemonize參數爲no,所以redis不會在後臺運行,這時要測試,我們需要重新開一個終端。修改爲yes則爲後臺運行redis。另外配置文件中規定了pid文件,log文件和數據文件的地址,如果有需要先修改,默認log信息定向到stdout.

redis.conf的主要配置參數的意義

daemonize:是否以後臺daemon方式運行
pidfile:pid文件位置
port:監聽的端口號
timeout:請求超時時間
loglevel:log信息級別
logfile:log文件位置
databases:開啓數據庫的數量
save * *:保存快照的頻率,第一個*表示多長時間,第三個*表示執行多少次寫操作。在一定時間內執行一定數量的寫操作時,自動保存快照。可設置多個條件。
rdbcompression:是否使用壓縮
dbfilename:數據快照文件名(只是文件名,不包括目錄)
dir:數據快照的保存目錄(這個是目錄)
appendonly:是否開啓appendonlylog,開啓的話每次寫操作會記一條log,這會提高數據抗風險能力,但影響效率。
appendfsync:appendonlylog如何同步到磁盤(三個選項,分別是每次寫都強制調用fsync、每秒啓用一次fsync、不調用fsync等待系統自己同步)


二、監控及配置

./redis-cli 進入到Redis命令行, 直接輸入:INFO命令即可查看Redis服務器的所有運行信息。
以下是幾個常用的命令:

DBSIZE 返回當前打開的數據庫中Keys的數量。
FLUSHALL 清空當前服務器管理的數據庫中的所有Keys,不僅限於當前打開的數據庫。
FLUSHDB 清空當前數據庫中的所有Keys。
SAVE設置RDB持久化模式的保存策略。
SHUTDOWN停止所有的客戶端,同時以阻塞的方式執行內存數據持久化。
SLOWLOG GET 10 查看最新10條日誌記錄。
動態修改參數,也就是 redis.conf 中的參數,在命令行直接修改的好處是不需要重啓Redis服務參數即可生效。注意並不是所有的配置參數都會生效,查看所有可以動態修改的參數執行命令:CONFIG GET * 查看。

得到配置參數:CONFIG GET parameter
注意在命令中不能使用數量縮寫格式,如GB、KB等,只能使用表示字節數量的整數值。
設置配置參數:CONFIG SET parameter value

如果想在一個命令中設置多個同類型參數,如redis.conf配置文件中的save參數:save 900 1/save 300 10。在該命令中我們可以將多個key/value用雙引號括起,並用空格符隔開,如:config set save "900 1 300 10"。

三、持久化策略

Redis默認的持久化文件放在:/var/lib/redis/6379,可在配置文件中修改。有如下幾種持久化策略:

RDB持久化:
該機制是指在指定的時間間隔內將內存中的數據集快照寫入磁盤。
AOF持久化:
該機制將以日誌的形式記錄服務器所處理的每一個寫操作,在Redis服務器啓動之初會讀取該文件來重新構建數據庫,以保證啓動後數據庫中的數據是完整的。
無持久化:
我們可以通過配置的方式禁用Redis服務器的持久化功能,這樣我們就可以將Redis視爲一個功能加強版的memcached了。
同時應用AOF和RDB。

1、RDB策略:

將整個Redis數據庫整體備份到一個文件,此文件以二進制格式保存,所以恢復會非常快,RDB採用的是每隔幾秒備份一次,所以如果意外宕機,會有幾秒的數據丟失。另外Redis是採用fork出子線程執行備份操作,這回導致Redis在備份時會變慢。
Redis默認採用RDB持久化策略:

save 900 1              #在900秒(15分鐘)之後,如果至少有1個key發生變化,則dump內存快照。
save 300 10            #在300秒(5分鐘)之後,如果至少有10個key發生變化,則dump內存快照。
save 60 10000          #在60秒(1分鐘)之後,如果至少有10000個key發生變化,則dump內存快照。
RDB備份過程:

Redis先fork子進程。
子進程將快照數據寫入到臨時RDB文件中。
當子進程完成數據寫入操作後,再用臨時文件替換老的文件。
修復壞損的AOF文件:執行命令:redis-check-aof --fix <filename>

2、AOF策略:

將所有執行的命令備份到文件,恢復數據庫時,會依次執行Redis命令,所以會恢復會比較慢且備份文件比RDB策略大。好處是數據不會丟失。
啓用AOF策略:appendonly no改爲appendonly yes
策略配置:

appendfsync always #每次有數據修改發生時都會寫入AOF文件。
appendfsync everysec #每秒鐘同步一次,該策略爲AOF的缺省策略。
appendfsync no #從不同步。高效但是數據不會被持久化。

3、恢復:

直接把備份好的數據文件,放到Redis的持久化目錄下,啓動Redis即可。要保證文件名與Redis配置的備份文件名相同。
Redis備份有以下策略:

如果只配置AOF,重啓時加載AOF文件恢復數據;
如果同時 配置了RBD和AOF,啓動是隻加載AOF文件恢復數據;
如果只配置RBD,啓動是講加載dump文件恢復數據。
四、虛擬內存
Redis是一個內存數據庫,默認情況下會把所有的數據存到內存中,這樣會導致數據量大了以後內存消耗非常大。Redis引入了虛擬內存來解決這個問題。
Redis的虛擬內存與操作系統的虛擬內存不是一碼事,Redis採用自己實現的策略來進行內存與硬盤的數據交換,原因如下:

操作系統的虛擬內存是已4k頁面爲最小單位進行交換的,而Redis的內容大部分都遠遠小於4K,會導致資源的浪費。
Redis的集合對象類型如list,set可能存在與多個操作系統頁面上。最終可能造成只有10%key被經常訪問,但是所有操作系統頁面都會被操作系統認爲是活躍的。
Redis在寫到硬盤上時會執行壓縮,節省空間並減少操作系統的CPU、IO負擔。
下面是vm相關配置:
vm-enabled yes                       #開啓vm功能
vm-swap-file /tmp/redis.swap         #交換出來的value保存的文件路徑
vm-max-memory 1000000                #redis使用的最大內存上限
vm-page-size 32                      #每個頁面的大小32個字節
vm-pages 134217728                   #最多使用多少頁面
vm-max-threads 4                     #用於執行value對象換入換出的工作線程數量
策略:

Redis爲了保證Key的查找速度,永遠不會將Key保存到磁盤,只會將Value保存;
當Redis內存佔用達到vm-max-memory設置的值,就會選擇最長時間不訪問的對象,如果兩個對象時間一樣老,則會選擇較大的對象;
和操作系統一樣redis也是按頁面來交換對象的。redis規定同一個頁面只能保存一個對象;
最佳實踐:

如果數據庫中有大量的keys,其中每個key僅僅關聯很小的value,那麼這種場景就不是非常適合使用虛擬內存。
根據自己的應用場景,合理設置每個頁面的大小vm-page-size ;

如果vm-max-threads設置爲0,則會同步的執行,那麼當某一客戶端正在訪問交換文件中的數據時,其它客戶端如果再試圖訪問交換文件中的數據,該客戶端的請求就將被掛起,直到之前的操作結束爲止。

四.redis數據結構

redis 的作者antirez曾稱其爲一個數據結構服務器(data structures server),這是一個非常準確的表述,redis的所有功能就是將數據以其固有的幾種結構保存,並提供給用戶操作這幾種結構的接口。我們可以想象我們在各種語言中的那些固有數據類型及其操作。

redis目前提供四種數據類型:string,list,setzset(sorted set)和Hash

  • string是最簡單的類型,你可以理解成與Memcached一模一個的類型,一個key對應一個value,其上支持的操作與Memcached的操作類似。但它的功能更豐富。
  • list是一個鏈表結構,主要功能是push、pop、獲取一個範圍的所有值等等。操作中key理解爲鏈表的名字。
  • set是集合,和我們數學中的集合概念相似,對集合的操作有添加刪除元素,有對多個集合求交併差等操作。操作中key理解爲集合的名字。
  • zset是set的一個升級版本,他在set的基礎上增加了一個順序屬性,這一屬性在添加修改元素的時候可以指定,每次指定後,zset會自動重新按新的值調整順序。可以理解了有兩列的mysql表,一列存value,一列存順序。操作中key理解爲zset的名字。
  • Hash數據類型允許用戶用Redis存儲對象類型,Hash數據類型的一個重要優點是,當你存儲的數據對象只有很少幾個key值時,數據存儲的內存消耗會很小.更多關於Hash數據類型的說明請見:http://code.google.com/p/redis/wiki/Hashes

在官網上給出了所有支持的接口列表,並副副附有詳細的介紹,地址:

http://code.google.com/p/redis/wiki/CommandReference

另外,作者還提供了一個非常貼心的web命令行模擬頁面,供初學者試用redis,地址:

http://try.redis-db.com/

五.redis主從配置

redis支持master-slave的主從配置,配置方法是在從機的配置文件中指定slaveof參數爲主機的ip和port即可

六 數據備份與還原腳本

-----自動備份redis數據並壓縮---
#!/bin/bash
filename=`date +%Y%m%d%H`
backredisFile=redis$filename.tar.gz
cd /home/redis/back
mkdir redis_dump
cd redis_dump
cp /usr/redis/data/* /home/redis/back/redis_dump -rf
cd ..
tar czf $backredisFile  redis_dump/
rm redis_dump -rf 

-----自動解壓並還原redis數據---
#!/bin/bash
filename='20150330013'
backredisFile=redis$filename.tar.gz
cd /home/redis/back
tar zxvf $backredisFile
/etc/init.d/redisd stop
cp /home/redis/back/redis_dump/* /usr/redis/data -r -f
/etc/init.d/redisd start
rm redis_dump -rf 


十.redis起步(鏈接整理)

項目首頁,下方是各種語言支持列表:

http://code.google.com/p/redis/

作者在wiki中給出了一個非常好的例子,以使我們可以快速上手,地址:

http://code.google.com/p/redis/wiki/TwitterAlikeExample

同時作者推薦的另一個教程,地址:

http://labs.alcacoop.it/doku.php?id=articles:redis_land

一個redis愛好者創建的相關問題討論網站:

http://www.rediscookbook.org/

爲什麼使用 Redis及其產品定位

http://www.infoq.com/cn/articles/tq-why-choose-redis

Redis內存使用優化與存儲

http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage

轉:http://blog.csdn.net/huwei2003/article/details/40536905

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