Redis 是一個開源的使用 ANSI C 語言編寫、支持網絡、可基於內存亦可持久化的日誌 型、 Key-Value數據庫redis
1.會話緩存(Session Cache)數據庫
最經常使用的一種使用Redis的情景是會話緩存(session cache)。用Redis緩存會話比其餘存儲(如Memcached)的優點在於:Redis提供持久化。當維護一個不是嚴格要求一致性的緩存時,若是用戶的購物車信息所有丟失,大部分人都會不高興的,如今,他們還會這樣嗎?vim
幸運的是,隨着 Redis 這些年的改進,很容易找到怎麼恰當的使用Redis來緩存會話的文檔。甚至廣爲人知的商業平臺Magento也提供Redis的插件。後端
2.全頁緩存(FPC)centos
除基本的會話token以外,Redis還提供很簡便的FPC平臺。回到一致性問題,即便重啓了Redis實例,由於有磁盤的持久化,用戶也不會看到頁面加載速度的降低,這是一個極大改進,相似PHP本地FPC。緩存
再次以Magento爲例,Magento提供一個插件來使用Redis做爲全頁緩存後端。bash
此外,對WordPress的用戶來講,Pantheon有一個很是好的插件 wp-redis,這個插件能幫助你以最快速度加載你曾瀏覽過的頁面。網絡
3.隊列session
Reids在內存存儲引擎領域的一大優勢是提供 list 和 set 操做,這使得Redis能做爲一個很好的消息隊列平臺來使用。Redis做爲隊列使用的操做,就相似於本地程序語言(如Python)對 list 的 push/pop 操做。工具
若是你快速的在Google中搜索「Redis queues」,你立刻就能找到大量的開源項目,這些項目的目的就是利用Redis建立很是好的後端工具,以知足各類隊列需求。例如,Celery有一個後臺就是使用Redis做爲broker,你能夠從這裏去查看。
redis版本:2.8.6
操做系統centos6.5
wget http://download.redis.io/releases/redis-2.8.6.tar.gz
以上每臺機器分別按照單機版安裝redis執行腳本redis_install.sh
腳本以下
#!/bin/bash yum -y install gcc make tcl; cp redis-2.8.6.tar.gz /usr/local/redis-2.8.6.tar.gz; cd /usr/local/; tar -xvf redis-2.8.6.tar.gz; cd redis-2.8.6; make; make test; mkdir -p /bestpayserver/data/redis; mkdir -p /bestpayserver/log/; sed -i 's/^daemonize no/daemonize yes/g' redis.conf sed -i 's/^port 6379/port 16379/g' redis.conf sed -i 's/^logfile ""/logfile \/bestpayserver\/log\/redis.log/g' redis.conf sed -i 's/^dir .\//dir \/bestpayserver\/data\/redis/g' redis.conf
# cd /usr/local/redis-2.8.6/src # ./redis-server /usr/local/redis-2.8.6/redis.conf
# ps -aux |grep redis Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 14134 0.0 0.9 137348 9544 ? Ssl 10:18 0:18 ./redis-server *:16379 root 25042 0.0 0.0 103256 828 pts/0 S+ 20:35 0:00 grep redis
進入客戶端:
# cd /usr/local/redis-2.8.6/src # ./redis-cli –p 16379 set 測試 redis 127.0.0.1:16379> set hello world OK <---成功 get 測試 redis 127.0.0.1:16379> get hello "world" <---成功
主master:192.168.161.233
從1slave:192.168.161.234
從2slave:192.168.161.235
監控機sentinel:192.168.161.236
# cd /usr/local/redis-2.8.6 # echo "slaveof 192.168.161.233 16379" >> redis.conf
Master上查看集羣狀態
[root@centos01 src]# ./redis-cli -h 192.168.161.233 -p 16379 info Replicatio
Slave上查看集羣狀態
[root@centos03 src]# ./redis-cli -h 192.168.161.235 -p 16379 info Replication
# cd /usr/local/redis-2.8.6 # vim sentinel.conf
修改一下配置
sentinel monitor mymaster 192.168.161.233 16379 1
其中mymaster爲自定義的master名稱,後面爲master的IP,端口號,最後面的1表示有一個sentinel監控。
Redis主從系統,除了作數據冗餘,開能夠作高可用性災備。Reids提供了Sentinel工具來監控各Master的狀態,若是Master異常,則會作主從切換,將slave做爲master,將master做爲slave。主從切換以後,master_redis.conf、slave_redis.conf和sentinel.conf的內容都會發生改變。master_redis.conf中會多了一句slaveof的配置,sentinel.conf的監控目標也隨之調換,這一點要注意。
啓動監控機:
#./redis-server /usr/local/redis-2.8.6/sentinel.conf --sentinel &
效果以下:
在master上查看監控狀態
# ./redis-cli -h 192.168.161.236 -p 26379 info Sentinel
效果以下:
在master 用redis客戶斷 上查看監控機上 slave狀態
# ./redis-cli -h 192.168.161.236 -p 26379 sentinel slaves mymaster
Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案,當用Redis作Master-slave的高可用方案時,假如master宕機了,Redis自己(包括它的不少客戶端)都沒有實現自動進行主備切換,而Redis-sentinel自己也是一個獨立運行的進程,它能監控多個master-slave集羣,發現master宕機後能進行自懂切換。
它的主要功能有如下幾點
不時地監控redis是否按照預期良好地運行;
若是發現某個redis節點運行出現情況,可以通知另一個進程(例如它的客戶端);
可以進行自動切換。當一個master節點不可用時,可以選舉出master的多個slave(若是有超過一個slave的話)中的一個來做爲新的master,其它的slave節點會將它所追隨的master的地址改成被提高爲master的slave的新地址
很顯然,只使用單個sentinel進程來監控redis集羣是不可靠的,當sentinel進程宕掉後(sentinel自己也有單點問題,single-point-of-failure)整個集羣系統將沒法按照預期的方式運行。因此有必要將sentinel集羣,這樣有幾個好處:
即便有一些sentinel進程宕掉了,依然能夠進行redis集羣的主備切換;
若是隻有一個sentinel進程,若是這個進程運行出錯,或者是網絡堵塞,那麼將沒法實現redis集羣的主備切換(單點問題);
若是有多個sentinel,redis的客戶端能夠隨意地鏈接任意一個sentinel來得到關於redis集羣中的信息。