Redis
Redis提供了一定的事務支援,可以保證一組操作原子執行不被打斷,但是如果執行中出現錯誤,事務不能復原,Redis未提供復原支援。
<code>multi</code> 開啟事務
<code>exec</code> 執行事務
使用multi開啟事務後,操作的指令并未立即執行,而是被redis記錄在隊列中,等待一起執行。當執行exec指令後,開始執行事務指令,最終得到每條指令的結果。
如果事務中出現了錯誤,事務并不會終止執行,而是隻會記錄下這條錯誤的資訊,并繼續執行後面的指令。是以事務中出錯不會影響後續指令的執行。
在Redis的Python 用戶端庫redis-py中,提供了pipeline (稱為流水線 或 管道),該工具的作用是:
在用戶端統一收集操作指令
補充上multi和exec指令,當作一個事務發送到redis伺服器執行
若在建構的redis事務在執行時依賴某些值,可以使用watch對資料值進行監視。
事務exec執行前被監視的stock值未變化,事務正确執行。
此時在另一個用戶端修改stock的值,執行
當第一個用戶端再執行exec時
表明事務需要監視的stock值發生了變化,事務不能執行了。
注意:Redis Cluster 叢集不支援事務
redis可以将資料寫入到磁盤中,在停機或當機後,再次啟動redis時,将磁盤中的備份資料加載到記憶體中恢複使用。這是redis的持久化。持久化有如下兩種機制。
redis可以将記憶體中的資料寫入磁盤進行持久化。在進行持久化時,redis會建立子程序來執行。
redis預設開啟了快照持久化機制。
進行快照持久化的時機如下
定期觸發
redis的配置檔案
BGSAVE
執行<code>BGSAVE</code>指令,手動觸發RDB持久化
SHUTDOWN
關閉redis時觸發
redis可以将執行的所有指令追加記錄到檔案中持久化存儲,這是redis的另一種持久化機制。
redis預設未開啟AOF機制。
redis可以通過配置如下項開啟AOF機制
AOF機制記錄操作的時機
使用AOF機制的缺點是随着時間的流逝,AOF檔案會變得很大。但redis可以壓縮AOF檔案。
redis允許我們同時使用兩種機制,通常情況下我們會設定AOF機制為everysec 每秒寫入,則最壞僅會丢失一秒内的資料。
為了保證redis最大程度上能夠使用,redis提供了主從同步+Sentinel哨兵機制。
https://redis.io/topics/sentinel
redis提供的哨兵是用來看護redis執行個體程序的,可以自動進行故障轉移,其功能如下:
Monitoring. Sentinel constantly checks if your master and slave instances are working as expected.
Notification. Sentinel can notify the system administrator, another computer programs, via an API, that something is wrong with one of the monitored Redis instances.
Automatic failover. If a master is not working as expected, Sentinel can start a failover process where a slave is promoted to master, the other additional slaves are reconfigured to use the new master, and the applications using the Redis server informed about the new address to use when connecting.
Configuration provider. Sentinel acts as a source of authority for clients service discovery: clients connect to Sentinels in order to ask for the address of the current Redis master responsible for a given service. If a failover occurs, Sentinels will report the new address
監控。Sentinel會不斷檢查您的主執行個體和從執行個體是否按預期工作。
通知。Sentinel可以通過API通知另一個計算機程式System Administrator,其中一個受監控的Redis執行個體有問題。
自動故障轉移。如果主伺服器不能按預期工作,Sentinel可以啟動故障轉移過程,其中從伺服器更新為主伺服器,其他附加的從伺服器将重新配置為使用新的主伺服器,并且使用Redis伺服器的應用程式将在連接配接時使用的新位址告知。
配置提供程式。Sentinel是客戶的授權來源
服務發現:用戶端連接配接到sentinels,以請求目前負責給定服務的redis主機的位址。如果發生故障轉移,Sentinels将報告新位址
在redis安裝後,會自帶sentinel哨兵程式,修改sentinel.conf配置檔案
sentinel monitor mymaster 127.0.0.1 6380 2 說明
mymaster 為sentinel監護的redis主從叢集起名
127.0.0.1 6300 為主從中任一台機器位址
2 表示有兩台以的sentinel認為某一台redis當機後,才會進行自動故障轉移。
啟動方式:
至少三個sentinel以上
sentinel要分散運作在不同的機器上
使用示例
https://redis.io/topics/partitioning
Reids Cluster叢集方案,内部已經內建了sentinel機制來做到高可用。
redis cluster 不支援事務
redis cluster 不支援多鍵操作,如mset
緩存
持久存儲
資料庫的統計備援字段 放到 redis中儲存
https://redis.io/documentation
《Redis實踐》 (Redis in action)
多思考也是一種努力,做出正确的分析和選擇,因為我們的時間和精力都有限,是以把時間花在更有價值的地方。