redis是一種非關系性數據庫,單進程工作模型,通常用來做KV存儲,同memcached一樣,所有數據加載至內存工作因此工作效率非??欤麜却嬷械臄祿街链疟P當中,使得數據不會像memcached的一樣,斷電后丟失數據。
自身支持多種數據結構(此處列出常用數據結構)
string:單一的kv存儲
hash:支持hash計算后的存儲
list:列表存儲
set:無序集合
sortset:有序集合
另外redis還支持作為消息隊列使用
支持不嚴格的事務,redis的事務屬于將多個語句打包一次性執行,但如果在執行過程中發現單個語句發生了錯誤,不會進行回滾,而會繼續往下執行,但好在redis給我們提供了一個watch功能,如果在一次事務中,事務所需要修改到的數據如果發生了改變,執行時會拒絕執行。在事務執行時,redis不會接收任何其他指令,直到事務完成以后再執行其他操作。
redis像磁盤中同步數據的方式有兩種,RDB(snapshot)和AOF(appendonlyfile),RDB類似于我們在mysql中的備份策略,定期的向磁盤進行同步。AOF類似于mysql中的二進制文件一樣,將語句追加至文件中。
redis常用場景,一般作為kv存儲使用或者在需要使用消息隊列時用到。
redis同樣支持主從復制,一主多從,并且支持鏈式復制,主從服務器都異步同步數據,因此同步過程中從服務器仍能接受讀請求,主仍能接受讀寫請求,
同步方式:在從服務鏈接到主服務器會發出同步指令,主服務器收到后會將內存中所有數據同步至RDB(快照)文件中,在發送給從服務器,從服務器在接受到后加載至內存中,以完成同步。
盡管如此redis還是和mysql一樣,面臨主節點意外down機后,不能進行自動主從切換。redis直接提供了解決方案,在redis中有個叫sentinel的組件,他負責監控主節點存活狀態,如果主節點無法聯系,會選舉出從節點變更為主節點。
下面演示一下redis主從,以及基于sentinel實現主節點down機后自動切換
準備了3個節點,一主一從一sentinel
做好時間同步,配置好epel源,直接安裝
[root@localhost ~]# vi /etc/redis.conf
編輯主服務器配置文件,這里做實驗使用只需要修改主配置文件監聽在自己的IP地址上。
編輯從配置文件添加
slaveof [主ip] [主port] #主服務器IP 和端口
啟動服務
登錄主服務器,查看是否以有從服務器,接著可以插入些key 看同步是否成功
插入兩條數據
在從服務器上驗證~說明此事同步成功。
接著我們來配置sentinel節點。
[root@localhost ~]# vi /etc/redis-sentinel.conf
編輯配置文件
修改以下幾行
sentinel monitor mymaster 192.168.20.108 6379 1
mymaster指明集群名稱,可以隨便給,后面是主節點IP和端口,最后的1代表幾個sentinel認為主節點down了過后就可以進行切換,可以理解為票數。(避免sentinel節點自己于主節點通訊不正常,但能聯系到其他從節點,進行錯誤的切換,在常用情況下應該配置基數個節點的sentinel以避免發生上訴情況)
sentinel down-after-milliseconds mymaster 1000 #此行可不做修改,但這里定義的是多久聯系不到主節點,就認為需要切換,默認是30分鐘,太長了,我們這里實驗用 修改為1分鐘
protected-mode no #在redis3.2過后添加的安全選項,如果沒有BINDip,且沒有認證方式啟動,會自動啟動保護模式,遠程登陸進去無法做任何操作,這里我們給他指定為不啟用保護模式
daemonize yes #后臺運行
[root@localhost ~]# redis-server /etc/redis-sentinel.conf –sentinel #啟動服務
原創文章,作者:N24_Ghost,如若轉載,請注明出處:http://www.www58058.com/71265
總結的非常好,可以來一個目錄結構~~~~加油?。?!