Redis面試題,看這一篇就夠了

2021-02-23 BAT筆試面試

1、簡單介紹一下redis,有什麼特點?

官網介紹:

Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作資料庫、緩存和消息中間件。它支持多種類型的數據結構,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。Redis 內置了 複製(replication),LUA腳本(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions) 和不同級別的 磁碟持久化(persistence), 並通過 Redis哨兵(Sentinel)和自動 分區(Cluster)提供高可用性(high availability)。

特點:

(1)讀寫性能高

(2)數據類型豐富

(3)可持久化

(4)單線程,多路復用

2、Redis支持哪些數據類型?底層存儲結構分別是什麼?

set/get/incr/decr/incrby/decrby3. 底層存儲結構:簡單動態字符串(SDS: simple dynamic string)
struct sdshdr{         int len;         int free;         char buf[];}

lpush/lpop/rpush/rpop/llen1. 列表類型存儲的值為字符串類型,可以實現簡單消息隊列功能2. 每個list可以存儲 2^32 -1 個值(40多億)3. 可以從隊列頭部(lpush)或尾部插入(rpush)
typedef  struct listNode{              struct listNode *prev;              struct listNode *next;              void *value;  }listNode

sadd/scard/smembers/sismember/srem3. 每個set 可以存儲 2^32 -1 個值(40多億)4. 是通過hash實現的,新增/刪除/查找的複雜度均為O(1)5. 底層存儲結構:intset(整數集合) 或 hashtable(字典的值為null)6. 當同時滿足以下兩個條件時才使用intset存儲,否則使用hashtable存儲:
typedef struct intset{          uint32_t encoding;          uint32_t length;          int8_t contents[];}intset;

(4)Hash

2. 每個 hash 可以存儲 2^32 -1 鍵值對(40多億)
typedef struct dictht{          dictEntry **table;          unsigned long size;               unsigned long sizemask;          unsigned long used;}dictht

zadd/zcard/zrange/zrangebyscore1. 存儲的是字符串類型,每一個元素關聯一個double類型的分數2. 每個zset 可以存儲 2^32 -1 個值(40多億)4. 底層存儲的結構可以是ziplist或skiplist5. 當同時滿足以下兩個條件時才使用ziplist存儲,否則使用skiplist存儲
typedef struct zskiplistNode {     struct zskiplistLevel{                      struct zskiplistNode *forward;                      unsigned int span;     }level[];           struct zskiplistNode *backward;          double score;          robj *obj; } zskiplistNode
typedef struct zskiplist{ structz skiplistNode *header, *tail; unsigned long length; int level; }zskiplist;

3、Redis有哪些持久化方式?

(1)在指定的觸發機制下以快照的方式將內存中的數據寫入磁碟(5)有三種觸發快照的機制:save(阻塞)、bgsave(後臺非阻塞)、自動化(1)存儲文件緊湊,體積小,傳輸速度快,適合災難恢復
(1)快照過程中,無法保存所有的數據,數據量越大時,快照需要的時間越多,期間遺漏的數據越多(1)記錄每一條修改數據的指令,包括:新增、修改、刪除
(2)通過配置「appendonly yes」打開AOF功能(1)比RDB可靠,秒級數據丟失(取決於設置fsync策略)(3)數據恢復可控性高,如:通過刪除末尾部分指令進行回退
(3)由於需要頻繁的將命令刷新到文件中,對性能影響比RDB大

4、什麼是緩存穿透、緩存擊穿、緩存雪崩?各有什麼解決方法?

(1)緩存穿透

待查詢的key不存在,攻擊者可以構造一些不存在的特殊數據,發起大量請求落到資料庫中,導致資料庫壓力過大甚至掛掉。

解決方法:

(1)異常數據攔截:通過規則攔截不可能存在資料庫中的數據(如:手機號,email 都有特殊格式)。

(2)設置數據存在標識:如:使用布隆過濾器將存在的key緩存起來,可以過濾掉大部分不存在的key。

(3)緩存不存在的key:構造一個特殊的值緩存不存在的key,緩存時間設定短一些。

(2)緩存擊穿

查詢的key存在資料庫中,某一個時間點緩存超時,同時有大量該key的查詢,都落到數據中,導致資料庫壓力過大甚至掛掉。

解決方法:

當緩存中沒有查到該key,準備去查資料庫之前,進行加鎖,即每個key最多只允許一個線程去查資料庫,從而降低資料庫的壓力。

(3)緩存雪崩

某個時間點,大量key超時,這些key的查詢都落到資料庫,導致資料庫壓力過大甚至掛掉。

解決方法:

key的超時時間設置分散一點,可以設置成一個區間的隨機值。

5、Redis有哪些應用場景?

(1)緩存會話

(2)秒殺活動

(3)排行榜

(4)分布式鎖

(5)計數問題

(6)消息發布與訂閱




相關焦點

  • 46道Redis面試題,含參考答案!
    redis cluster3.0 自帶的集群,特點在於他的分布式算法不是一致性 hash,而是 hash 槽的概念,以及自身支持節點設置從節點。具體看官方文檔介紹。3.在業務代碼層實現,起幾個毫無關聯的 redis 實例,在代碼層,對 key 進行 hash 計算,然後去對應的redis 實例操作數據。
  • 【187期】出現機率比較大的Redis面試題(含答案)
    本文的面試題如下:緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級等問題redis的數據類型,以及每種數據類型的使用場景,Redis 內部結構有沒有嘗試進行多機redis 的部署?如何保證數據一致的?為什麼Redis的操作是原子性的,怎麼保證原子性的?
  • 去pdd面試,redis把我面哭了【附面試答案】
    但是想進大廠,就得經過很複雜的面試,才有資格去大廠扭螺絲。今天看下某網友去pdd面試,都問了哪些技術。面試都附了答案,如果不會的,我們可以繼續充電哦。祝你早日挺近大廠,奧利給……下面看面試情況1、簡單做一下自我介紹吧,為什麼這麼快就想換工作。簡單說下你簡歷中的項目。
  • Redis 面試題,面試官能問的都被我找到了!
    (1) memcached所有的值均是簡單的字符串,redis作為其替代者,支持更為豐富的數據類型(2) redis的速度比memcached快很多(3) redis可以持久化其數據3、Redis支持哪幾種數據類型?
  • 總結一波 Redis 面試題
    這便是Bloom-Filter的基本思想。Bloom-Filter一般用於在大數據量的集合中判定某元素是否存在。緩存穿透與緩存擊穿的區別緩存擊穿:是指一個key非常熱點,在不停的扛著大並發,大並發集中對這一個點進行訪問,當這個key在失效的瞬間,持續的大並發就穿破緩存,直接請求數據。
  • 中高級開發面試必問的Redis面試題,看這篇就夠了!
    Redis 沒有關係型資料庫中的表這一概念來將同種類型的數據存放在一起,而是使用命名空間的方式來實現這一功能。鍵名的前面部分存儲命名空間,後面部分的內容存儲 ID,通常使用 : 來進行分隔。例如下面的 HASH 的鍵名為 article:92617,其中 article 為命名空間,ID 為 92617。
  • 三歪推薦:Redis常見的面試題
    所謂熱key問題就是,突然有幾十萬的請求去訪問redis上的某個特定key,那麼這樣會造成流量過於集中,達到物理網卡上限,從而導致這臺redis的伺服器宕機引發雪崩。顯然,使用布隆過濾器之後會有一個問題就是誤判,因為它本身是一個數組,可能會有多個值落到同一個位置,那麼理論上來說只要我們的數組長度夠長,誤判的概率就會越低,這種問題就根據實際情況來就好了。
  • 產品面試攻略,看這一篇就夠了!(下)
    接上一篇面試問題大匯總,上一篇主要分析了面試過程中常見的8個面試問題和回答套路,詳細內容大家可以去看《產品面試攻略,看著一篇就夠了!(上)》下面我們繼續分析其他面試中常見的問題。09 如何判斷需求優先級這個問題的其他問法是:如果你手頭有很多工作,你怎麼判斷先做哪件後做哪件?
  • 經典面試題:Redis的熱key問題如何發現和解決?
    本文預計分為如下幾個部分正文熱Key問題 上面提到,所謂熱key問題就是,突然有幾十萬的請求去訪問redis上的某個特定key。那麼,這樣會造成流量過於集中,達到物理網卡上限,從而導致這臺redis的伺服器宕機。那接下來這個key的請求,就會直接懟到你的資料庫上,導致你的服務不可用。
  • Redis面試突擊專用
    點擊「程式設計師面試吧」,選擇「星標🔝」點擊文末「閱讀原文」解鎖往期資料合集!本文的面試題如下:Redis 持久化機制 緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級等問題 熱點數據和冷數據是什麼 Memcache與Redis的區別都有哪些?
  • Java 最常見的 200+ 面試題:面試必備
    聊回面試題這件事,這份面試清單原本是我們公司內部使用的,可到後來有很多朋友在微信上聯繫到我,讓我幫他們找一些面試方面的資料,而且這些關係也不太好拒絕,一呢,是因為這些找我,要面試題的人,不是我的好朋友的弟弟妹妹,就是我的弟弟妹妹們;二呢,我也不能馬馬虎虎的對付,受人之事忠人之命,我也不能辜負這份信任。
  • 總結一波 Redis 面試題,收藏起來.
    這便是Bloom-Filter的基本思想。Bloom-Filter一般用於在大數據量的集合中判定某元素是否存在。緩存穿透與緩存擊穿的區別緩存擊穿:是指一個key非常熱點,在不停的扛著大並發,大並發集中對這一個點進行訪問,當這個key在失效的瞬間,持續的大並發就穿破緩存,直接請求數據。
  • 想去大公司但害怕面試?看這一篇就夠了!
    首先聲明,這一篇文章並非完全原創,它的靈感來源於一篇我最近在Medium上讀到的英文博客:ABC: Always Be Coding。我在這篇文章的基礎上做了一些修改以及加入了一些我個人的感受,大家如果英文OK想要直接感受原文的,可以點擊閱讀原文跳轉。
  • 2019 最新 200 道 Java 面試題
    ,我做了大量的「功課」,首先我研究了幾乎所有大廠的面試題,還和負責招聘工作的幾個朋友,詳細的探討了 Java 面試所要涉及的知識點,於是就有了今天大家看到的這 200 多道面試題。原因二:節省招聘雙方彼此的時間,有些來公司面試人,無論是有幾年工作經驗的還是剛畢業的,就連這些最基礎的面試題都搞不定,這確實讓人很遺憾。常言道「一屋不掃何以掃天下」,也是同樣的道理,如果連基礎的概念都搞不明白,又怎麼讓面試官相信你能寫出高質量的程序呢?與其浪費彼此的時間,還不如花點時間把自己的基礎知識掌握牢固。
  • 程式設計師必備|面試中常被問到的redis持久化的問題
    「年輕人,看你愁眉苦臉,一定是剛面試被懟了吧?」老人笑著說道「老頭,你以為你是算命的嗎?」少年不服氣的說道「這樣吧,你我有緣,我看你骨骼驚奇,這本《redis七十二絕技》免費送你,你拿回去讀一讀,照著練習,假以時日你定能稱霸職場」老人笑完便收攤走了。
  • HashMap面試題,看這一篇就夠了!
    序言在後端的日常開發工作中,集合是使用頻率相當高的一個工具,而其中的HashMap,則更是我們用以處理業務邏輯的好幫手,同時HashMap的底層實現和原理,也成了面試題中的常客。想要詳細了解運作原理,那就先從這兩個方法看起吧,這兩個方法弄明白了,也就基本能理清HashMap的實現原理了。1.2 put()方法 當了解了以上的變量和用途後,接下來看下put()方法的具體實現:
  • 史上最全 50 道 Redis 面試題
    1.twemproxy,大概概念是,它類似於一個代理方式,使用方法和普通redis無任何區別,設置好它下屬的多個redis實例後,使用時在本需要連接redis的地方改為連接twemproxy,它會以一個代理的身份接收請求並使用一致性hash算法,將請求轉接到具體redis,將結果再返回twemproxy。使用方式簡便(相對redis只需修改連接埠),對舊項目擴展的首選。
  • 一不小心肝出了4W字的Redis面試教程
    到這裡我們已經精通Redis的五種基本數據類型了,又可以去和面試官扯皮了,扯不過就跑路吧,或者這篇文章多看幾遍,相信對你總是有好處的。Redis內存分配策略概述今天就帶來了一個面試常問的一個問題:假如你的Redis內存滿了怎麼辦?
  • 阿里|美團|騰訊面試官集體發聲:你這就是面試作弊寶典啊
    這些都是這幾年來BATJ面試問的最多關於Java的面試題,大家可以以這個為標準參考下多多準備下,可能針對一部分人來說比較簡單,但是今年有很多面試人員,都是敗在了基礎上面,所以你也可以查缺補漏下看哪些是你還記得都會的/或者是面試有哪些被問到比較多.
  • Redis相比memcached有哪些優勢?box-sizing的作用?前端面試題
    1) memcached所有的值均是簡單的字符串,redis作為其替代者, 支持更為豐富的數據類型;2) redis的速度比memcached快很多;3) redis可以持久化其數據。2020Web前端開發面試