1. Meincache 和 Redis的差別
meincache: 支援簡單資料類型 ,不支援持久化、不支援主從同步、不支援分片
Redis: 支援豐富的資料類型, 支援資料持久化存儲 支援分片 支援主從同步
2. Redis為什麼能這麼快
完全基于記憶體,絕大多數請求是記憶體操作,執行效率高
資料結構簡單,對資料的操作也簡單
讀取時不進行磁盤IO,采用了多路複用io阻塞機制
單線程沒有線程上下文切換,且單線程也能處理高并發請求
3.Redis的資料結構
String: 基本資料類型,以鍵值對方式存儲
Hash: String元素組成的字典,類似于表結構,一般存儲json格式的javaBean對象
List: 存儲有序的String類型元素
set: 存儲無序且資料不可重複的String類型元素
shored set: 存儲有序且不可重複的資料,分數值來确定排列順序
HyperLoglog: 主要适用場景是海量資料的計算。特點是速度快。占用空間小。
Geo: 儲存使用者給定的地理位置資訊
4.如何從海量key中查詢某一固定字首的key
使用keys和SCAN
一次keys指令傳回所有比對鍵的資料,如果資料量過大将時很耗時的
SCAN: 基于遊标的疊代器,根據上一次的遊标來疊代資料,可以設定大小,但傳回的數量不可控隻能大機率符合count參數,會出現重複資料,需要去重。SCAN整體加起來的耗時大于keys
5.如何通過Redis實作分布式鎖
分布式鎖是通路不同系統或redis系統共享資源的鎖的實作
解決問題:互斥性、安全性、死鎖、容錯
實作:
1. 利用setnx+expire指令 (錯誤的做法)
Redis的SETNX指令,setnx key value,将key設定為value,當鍵不存在時,才能成功,若鍵存在,什麼也不做,成功傳回1,失敗傳回0 。 SETNX實際上就是SET IF NOT Exists的縮寫
3. 使用 set key value [EX seconds][PX milliseconds][NX|XX] 指令 (正确做法)
EX seconds: 設定過期時間,機關為秒
PX milliseconds: 設定過期時間,機關為毫秒
NX: 僅當key不存在時設定值
XX: 僅當key存在時設定值
6.大量key同時過期的注意事項
集中過期,由于消除大量的key很耗時,會使reids卡頓
解決:在key過期時間上加入時間戳
7.如何使用Redis做異步隊列
使用List作為隊列, Rposh 生産消息 Lpop 消費消息
缺點:沒有等待隊列有值就直接消費
可在應用層使用sleep機制去調用Lpop,BLpop阻塞等待
pub/sub :釋出訂閱模式 ,一端釋出,多端監聽
缺點:無狀态,無法保證消息可達 ,使用Kafka、RabbitMQ消息隊列來解決
8.Reids持久化
RDB(快照)持久化: 儲存某個時間點的全量資料快照
實作:
SAVE:阻塞Redis的伺服器程序直到RDB檔案建立完成
BGSAVE:Fork出一個子程序來建立RDB檔案,不阻塞伺服器程序
AOF持久化: 儲存寫狀态, 記錄除了查詢以外所有變更資料庫的狀态的指令
以append的形式追加到AOF檔案中
RDB-AOF 混合持久化方式:RDB做全量儲存,AOF做追加存儲

長期更新,有問題煩勞各位指出!!!