Stringjava
Listredis
Set數據庫
Mapapi
Zset緩存
List數據結構是雙向鏈表,能夠左右插入刪除,取出服務器
Map是hashmap的結構數據結構
Set也是hashmap的結構,可是value沒有值框架
Zset是在Set的基礎上,加上一個能夠排序的score字段socket
Jedis是對Redis的官方JAVA封裝,提供了全部api和操做分佈式
RedisTemple是對Jedis的高級封裝,提供了不少特性,例如鏈接池管理
快照的方式持久化,將redis數據保存成二進制的文件
能夠直接保存也能夠後臺保存,直接持久化會致使其餘服務被阻塞
後臺保存會fork一個子進程,保存RDB
優缺點:
存儲效率高、適合備份、恢復數據塊
沒法實時持久化,內容佔用高
增量文件的方式持久化,將寫命令所有記錄在AOF文件中,記錄數據庫的改變
能夠每次命令、每秒、或者系統控制
對AOF中的指令進行壓縮,去除重複、無效、統一數據的屢次操做等
AOF會fork一個子進程將AOF緩衝區的內容寫入AOF文件
AO重寫也會fork一個子進程,將AOF從新緩衝區的內容寫入AOF文件,代替原來的AOF文件
優缺點:
丟失的數據不多、
AOF文件存儲大、災難恢復慢
和java的sychnized和鎖很像
一個是對操做加同步代碼塊,一個是對資源加鎖
數據刪除策略和逐出策略
刪除策略:是數據過時之後,如何處理
逐出策略:是內存不夠之後,如何刪除數據得到空間
定時刪除:過時了就刪除
惰性刪除:過時了不刪除,下次使用的時候再刪除
按期刪除:定一個時間,例如十秒鐘刪除一次過時的數據
定時CUP佔用高,惰性內存佔用高
按期是一種折中,刪除每次都是輪訓每一個數據庫,而後隨機掃描一段時間,若是過時數據多與必定的比值,就再來一次
從有有效期的數據中刪除4
LRU LFU TTL RANDOM
從全部數據中刪除3
LRU LFU RANDOM
不刪除1
bitmaps hyperloglog GEO
bitmaps就是一個記錄比特位的數據類型,能夠用來統計二值數據
hyperloglog 基數類型,用來作基數統計的,能夠用最大12k的空間,統計無限多的值
GEO地理位置數據
設置master和slave的方式:命令、配置、和框架
主從複製分爲三個階段
全量複製
增量複製
命令傳遞
slave將本身的ip和port發送給master,創建socket並保存鏈接
隨後可能還有受權驗證的過程,master保存slave的port
第一次複製的時候
slave發送同步命令,初始runid爲?,offset爲-1
master開始bgsave,保存一個RDB文件,而且經過socket返回slave,同時返回runid和offset
slave接受完RDB後,清空數據庫,經過RDB恢復
以上是全量複製的過程,後面是增量複製
slave告知master本身全量複製完成,發送runid和offset
master把複製緩衝區的AOF文件發送給slave
slave執行bgwriteaof 恢復數據
完成增量複製
slave發送offset
master判斷是offset否在緩衝中,不在就全量複製,在的話就把offset以後的內容發給slave
runid不對也會全量複製
哨兵是一個分佈式系統,用來監控主從的正常運行和發現故障以及故障轉移
哨兵也是一臺redis服務器,只是不提供數據服務
工做階段:
監控
通知
故障轉移
第一臺sentinel,首先獲取master的信息,而後獲取slave的信息
後面的sentinel,獲取master、前面sentinel和slave的信息
sentinel們不斷的監控全部的redis服務器,發送hello信息
當一太sentinel發現有redis服務器發現故障的時候,告知全部sentinel,這臺服務器主觀下線
其餘sentinel也去hello這臺服務器,超過半數認爲這臺服務器下線了,就客觀下線
而後投票找一個負責人:每一個sentinel發信息給其餘,每一個sentinel將第一個收到的信息做爲票,得票最高爲負責人
負責人通知全部redis服務器,有服務器下線了,而且從slave中選一個新的主
原則:在線,響應快,與master斷開最久、offset優先等原則
redis集羣和主從區別,主從其實是作冗餘和備份,集羣是將大任務分化,對外保持一致
cluster集羣,rb腳本
內存存儲:將keyhash而後取模16384,分紅不一樣的槽,每一個reids服務器存儲一部分的槽,不論是新增仍是刪除,都是操做存儲的槽的數量
通信設計:請求來了一臺redis,命中就返回,不命中告知key所在服務器是哪一臺
服務上線以前,將一些數據預加載到redis中,防止一上線,大量熱點請求涌入
解決方案:
平常記錄熱點數據、創建數據留存隊列,kafka和strom、開啓腳本按期預熱、CDN加速
主從同時預熱
同時,大量key過時
解決方案:
內存逐出策略切換、數據分類拆分過時時間、設置永久key、加鎖
熱點key過時,大量請求打到數據庫上
解決方案:
黑客攻擊,大量無效的請求,key沒有,因此打到數據庫上
解決方案: