天天看點

Redis面試知識點總結v1

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做追加存儲![在這裡插入圖檔描述](https://img-blog.csdnimg.cn/20200711162633394.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDIxMDM3Mw==,size_16,color_FFFFFF,t_70)
           
Redis面試知識點總結v1
Redis面試知識點總結v1

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

繼續閱讀