Redis:web
一個開源的高性能的基於鍵-值(key-value存儲的內存數據庫 ;
支持多種類型的數據結構 string、list、hash、set、sorted set 等。
鍵值Key是惟一的,放在字典裏面。對數據庫的增、刪、查、改操做都是構建在對字典的操做之上。
Redis使用C語言開發,5.6+萬行代碼(v3.0.3)。redis
優勢:
異常快 - Redis很是快,每秒可執行大約110000次的設置(SET)操做,每秒大約可執行81000次的讀取/獲取(GET)操做。
支持豐富的數據類型 - Redis支持開發人員經常使用的大多數數據類型,例如列表,集合,排序集和散列等等。這使得Redis很容易被用來解決各類問題,由於咱們知道哪些問題能夠更好使用地哪些數據類型來處理解決。
操做具原子性 - 全部Redis操做都是原子操做,這確保若是兩個客戶端併發訪問,Redis服務器能接收更新的值。
多實用工具 - Redis是一個多實用工具,可用於多種用例,如:緩存,消息隊列(Redis本地支持發佈/訂閱),應用程序中的任何短時間數據,例如,web應用程序中的會話,網頁命中計數等。數據庫
存儲結構:緩存
持久化保存文件的兩種方式:服務器
1、RDB
能夠在指定的時間間隔內生成數據集的時間點快照。
save 900 1 #15分鐘內修改1次
save 300 10 #5分鐘內修改10次
save 60 10000 #1分鐘內修改10000次
2、AOF
記錄服務器執行的所寫操做命令,並在服務器啓動時,經過從新執行這些命令來還原數據集。
appendonly no #AOF日誌開關,默認關閉數據結構
符合必定條件時Redis會自動將內存中的所數據進行快照並存儲在硬盤上。進行快照的條件能夠由用戶在配置文件中自定義,由兩個參數構成:時間和改動的鍵的個數。當在指定的時間內被更改的鍵的個數大於指定的數值時就會進行快照。RDB是Redis默認採用的持久化方式,在配置文件中已經預置了3個條件;
能夠存在多個條件,條件之間是「或」的關係,只要知足其中一個條件,就會進行快照。 若是想要禁用自動快照,只須要將全部的save參數刪除便可。併發
慢日誌是 Redis 用來記錄查詢執行時間的日誌系統oracle
SLOWLOG get 5 #慢日誌查詢app
默認記錄耗時超過10毫秒
config get slowlog-log-slower-than
默認保存慢日誌條數128
config get slowlog-max-len分佈式
Redis主從模式
redis 支持 master-slave(主從模式,redis server 能夠設置爲另外一個 redis server 的主機(從機,從機按期從主機拿數據。特殊的,一個 從機一樣能夠設置爲一個 redis server 的主機,這樣一來master-slave 的分佈看起來就是一個有向無環圖 DAG,如此造成 redis server 集羣,不管是主機仍是從機都是 redis server,均可以提供服務。
從屬服務器本身制定誰是本身的主服務器
配置方法是在從機的配置文件中指定slaveof參數爲主機的ip和port
slaveof 10.120.241.38 6851 #主服務器
slave-read-only yes #從屬服務器只讀
一個master能夠多個slave。
一個slave能夠接收其餘slave的連接,即不只僅能鏈接一個master所屬的slaves,並且能鏈接到slave的slave,從而造成了「圖」結構。
在複製進行時,master是「非阻塞」的。即一個或多個slave對master進行第一次同步時,master仍然能夠提供查詢服務,而對於slave,當複製進行時則是「阻塞」的,期間slave不能響應查詢。
複製能夠用於提升數據的擴展性(好比多個slave用於只讀查詢,或者僅用於數據備份。
使用複製能夠避免在master存儲數據,經過修改redis.conf文件(將「save」的al註釋,這樣數據存儲只在slave端進行。
若是當前服務器已是某個主服務器(master server)的從屬服務器,那麼執行 SLAVEOF host port 將使當前服務器中止對舊主服務器的同步,丟棄舊數據集,轉而開始對新主服務器進行同步。
另外,對一個從屬服務器執行命令 SLAVEOF NO ONE 將使得這個從屬服務器關閉複製功能,並從從屬服務器轉變回主服務器,原來同步所得的數據集不會被丟棄。
利用『 SLAVEOF NO ONE 不會丟棄同步所得數據集』這個特性,能夠在主服務器失敗的時候,將從屬服務器用做新的主服務器,從而實現無間斷運行。
Redis哨兵模式
sentinel是redis高可用性的解決方案,由一個或多個sentinel實例組成的系統,主要大功能:
監控,能持續監控Redis的主從實例是否正常工做;
通知,當被監控的Redis實例出問題時,能經過API通知系統管理員或其餘程序;
自動故障恢復,若是主實例沒法正常工做,Sentinel將啓動故障恢復機制把一個從實例提高爲主實例,其餘的從實例將會被從新配置到新的主實例,且應用程序會獲得一個更換新地址的通知。
Redis Sentinel是一個分佈式系統,能夠部署多個實例來監控同一組Redis實例,通常在生產環境中部署多個實例來提升系統可用性,只要有一個Sentinel實例運行正常,就能保證被監控的Redis實例運行正常(相似Zookeeper,經過多個Zookeeper來提升系統可用性;
port 26379 #sentinel 端口
bind 10.162.66.152 26379 #sentinel 地址
sentinel monitor master_6379 10.162.66.152 6380 1 #監控的master
sentinel down-after-milliseconds master_6379 5000 #master最大響應時間
Redis實際應用
與oracle的數據一致性保持
新增操做:首先保存到oracle,而後保存到redis;
查詢操做:首先查詢redis,查找不到時,從oracle中查詢,並將結果保存到redis;
修改操做:刪除redis數據,修改oracle數據,再保存到redis;
刪除操做:刪除redis數據,再刪除oracle數據。
考慮到性能,目前redis不進行持久化,所以數據以oracle爲準,增刪改查操做都要保證oracle數據準確。