前言
Redis你們都不陌生了,是高併發解決方案居家必備的良藥。能夠幫助咱們解決高併發,存在的性能問題。面試
做爲面試常問中間件,你應該知道這些常見redis面試題。redis
常見面試題
- 單線程的redis爲毛這麼快?
從如下幾點回答,純內存操做,單線程操做避免了頻繁上下文切換,採用非阻塞的多路複用機制。 緩存
redis-client在操做的時候,產生不一樣類型的事件的socket,服務端的IO多路複用程序,將其放入隊列,事件派發器會去隊列中取,轉發到不一樣的事件處理器中處理。併發
- redis數據類型有哪些?
一共五種。異步
- String 常見的get/set操做。
- hash value能夠存放一些結構化的對象信息。
- list 能夠做爲簡單的隊列使用,利用lrange作分頁查詢。
- set 存放不重複的集合。
- sorted set 帶有score權重的set集合,能夠作排行榜需求。
- redis的過時策略有哪些?
定時刪除+惰性刪除socket
- 定時刪除:定時器監控key,過時自動刪除,過程消耗cpu,通常不採用。
- 按期刪除+惰性刪除:每隔100ms檢查一次,有過時key則刪除,惰性刪除是在嘗試獲取某個key時進行檢查,進行刪除操做。
- 內存淘汰機制:能夠設置redis的配置 maxmemory-policy volatile-lru,在內存不足時對使用最少的key進行淘汰。
- redis緩存穿透和雪崩怎麼解決?
緩存穿透:分佈式
- 互斥鎖;
- 異步更新:維護value的失效時間,異步線程進行更新;
- 布隆過濾器進行攔截;
防止雪崩:高併發
- 失效事件隨機,避免集體失效;
- 互斥鎖,存在性能問題;
- 多級緩存;
- redis併發key競爭如何解決?
通常的採用redis的事務機制,可是在集羣環境下數據已經分片就很難搞,redis的事務就顯得雞肋。性能
分狀況討論:線程
- 對順序沒有要求,採用分佈式鎖進行排隊,屬於悲觀鎖方式。
- 對順序有要求,採用時間戳方式,在set以前比對時間戳,屬於樂觀鎖方式。
歡迎關注公衆號【服務端技術雜談】,轉發,點贊。