Redis(Remote Dictionary Server),即遠程字典服務,是一個開源的使用ANSI C語言編寫、高性能的key-value資料庫,是當前使用最廣泛的NoSQL之一。 1、簡介 Redis是一個開源(BSD許可)的,記憶體中的數據結構存儲系統,它可以用作資料庫、緩存和消息中間件。 ...
Redis(Remote Dictionary Server),即遠程字典服務,是一個開源的使用ANSI C語言編寫、高性能的key-value資料庫,是當前使用最廣泛的NoSQL之一。
1、簡介
Redis是一個開源(BSD許可)的,記憶體中的數據結構存儲系統,它可以用作資料庫、緩存和消息中間件。 它支持多種類型的數據結構,如 字元串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢,bitmaps,hyperloglogs和地理空間(geospatial) 索引半徑查詢。 Redis內置了複製(replication),LUA腳本(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions)和不同級別的磁碟持久化(persistence), 並通過Redis哨兵(Sentinel)和自動分區(Cluster)提供高可用性(high availability)。
2、模式
2.1、單機模式
該模式只安裝一個節點,一般用於測試學習。
2.2、主從模式
主節點處理寫請求,從節點處理都請求;可以達到讀寫分離、backup等目的。
2.3、哨兵模式
為了保證redis的高可用,哨兵模式在組從模式的基礎上引入哨兵(Sentinel)來管理Redis的主從節點:
1.監控(Monitoring):Sentinel會不斷地檢查你的主伺服器和從伺服器是否運作正常。
2.提醒(Notification):當被監控的某個Redis伺服器出現問題時,Sentinel可以通過API向管理員或者其他應用程式發送通知。
3.自動故障遷移(Automatic failover):當一個主伺服器不能正常工作時,Sentinel會開始一次自動故障遷移操作,它會將其中一個從伺服器升級為新的主伺服器,並讓其他的從伺服器改為複製新的主伺服器;當客戶端試圖連接失效的主伺服器時,集群也會向客戶端返回新主伺服器的地址,使得集群可以使用新主伺服器代替失效伺服器。
2.3、集群模式(cluster)
當緩存數據量增加以後,無法用單體伺服器承載緩存服務時,需要把緩存的數據切分成不同的分區,將數據分區放到不同的伺服器中,用分散式的緩存來承載高併發的緩存訪問。Redis Cluster是官方在3.0版本後推出的分散式方案。
Redis Cluster 採用虛擬槽分區演算法來對數據進行拆分。槽是用來存放緩存信息的單位,在Redis中將存儲空間分成了16384個槽,也就是說Redis Cluster槽的範圍是0 -16383(2^4 * 2^10)。緩存信息通常是用Key-Value的方式來存放的,在存儲信息的時候,集群會對Key進行CRC16校驗並對16384取模(slot=CRC16(key)%16383)。得到的結果就是Key-Value所放入的槽,從而實現自動分割數據到不同的節點上。然後再將這些槽分配到不同的緩存節點中保存。
3、持久化
3.1、RDB持久化
RDB持久化是指在指定的時間間隔內將記憶體中的數據集快照寫入磁碟,實際操作過程是fork一個子進程,先將數據集寫入臨時文件,寫入成功後,再替換之前的文件,用二進位壓縮存儲。redis.conf中配置如下:
save 900 1 #在900秒(15分鐘)之後,如果至少有1個key發生變化,則dump記憶體快照。 save 300 10 #在300秒(5分鐘)之後,如果至少有10個key發生變化,則dump記憶體快照。 save 60 10000 #在60秒(1分鐘)之後,如果至少有10000個key發生變化,則dump記憶體快照。
dbfilename dump.rdb #快照文件名稱
3.2、AOF持久化
AOF持久化以日誌的形式記錄伺服器所處理的每一個寫、刪除操作,查詢操作不會記錄,以文本的方式記錄,可以打開文件看到詳細的操作記錄。redis.conf中配置如下:
appendonly no #是否開啟aof appendfilename "appendonly.aof" #日誌文件名稱 #appendfsync always #每次有數據修改發生時都會寫入AOF文件 appendfsync everysec #每秒鐘同步一次,該策略為AOF的預設策略 #appendfsync no #從不同步。高效但是數據不會被持久化