1. 程式人生 > >46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

開發十年,就只剩下這套架構體系了! >>>   

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

Redis高效能快取資料庫

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

1、什麼是 Redis?簡述它的優缺點?

Redis 的全稱是:Remote Dictionary.Server,本質上是一個 Key-Value 型別的記憶體資料庫,很像

memcached,整個資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料 flush 到硬碟上進行儲存。

因為是純記憶體操作,Redis 的效能非常出色,每秒可以處理超過 10 萬次讀寫操作,是已知效能最快的Key-Value DB。

Redis 的出色之處不僅僅是效能,Redis 最大的魅力是支援儲存多種資料結構,此外單個 value 的最大限制是 1GB,不像 memcached 只能儲存 1MB 的資料,因此 Redis 可以用來實現很多有用的功能。

比方說用他的 List 來做 FIFO 雙向連結串列,實現一個輕量級的高性 能訊息佇列服務,用他的 Set 可以做高效能的 tag 系統等等。

另外 Redis 也可以對存入的 Key-Value 設定 expire 時間,因此也可以被當作一 個功能加強版的memcached 來用。 Redis 的主要缺點是資料庫容量受到實體記憶體的限制,不能用作海量資料的高效能讀寫,因此 Redis 適合的場景主要侷限在較小資料量的高效能操作和運算上。

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

2、Redis 與 memcached 相比有哪些優勢?

  • memcached 所有的值均是簡單的字串,redis 作為其替代者,支援更為豐富的資料型別
  • redis 的速度比 memcached 快很多 redis 的速度比 memcached 快很多
  • redis 可以持久化其資料 redis 可以持久化其資料

3、Redis 支援哪幾種資料型別?

String、List、Set、Sorted Set、hashes

4、Redis 主要消耗什麼物理資源?

記憶體。

5、Redis 有哪幾種資料淘汰策略?

  • noeviction:返回錯誤當記憶體限制達到,並且客戶端嘗試執行會讓更多記憶體被使用的命令。
  • allkeys-lru: 嘗試回收最少使用的鍵(LRU),使得新新增的資料有空間存放。
  • volatile-lru: 嘗試回收最少使用的鍵(LRU),但僅限於在過期集合的鍵,使得新新增的資料有空間存放。
  • allkeys-random: 回收隨機的鍵使得新新增的資料有空間存放。
  • volatile-random: 回收隨機的鍵使得新新增的資料有空間存放,但僅限於在過期集合的鍵。
  • volatile-ttl: 回收在過期集合的鍵,並且優先回收存活時間(TTL)較短的鍵,使得新新增的資料有空間存放。

6、Redis 官方為什麼不提供 Windows 版本?

因為目前 Linux 版本已經相當穩定,而且使用者量很大,無需開發 windows 版本,反而會帶來相容性等問題。

7、一個字串型別的值能儲存最大容量是多少?

512M

8、為什麼 Redis 需要把所有資料放到記憶體中?

Redis 為了達到最快的讀寫速度將資料都讀到記憶體中,並通過非同步的方式將資料寫入磁碟。

所以 redis 具有快速和資料持久化的特徵,如果不將資料放在記憶體中,磁碟 I/O 速度為嚴重影響 redis 的效能。

在記憶體越來越便宜的今天,redis 將會越來越受歡迎, 如果設定了最大使用的記憶體,則資料已有記錄數達到記憶體限值後不能繼續插入新值。

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

9、Redis 叢集方案應該怎麼做?都有哪些方案?

  • codis
  • 目前用的最多的叢集方案,基本和 twemproxy 一致的效果,但它支援在節點數量改變情況下,舊節點資料可恢復到新 hash 節點。
  • redis cluster3.0 自帶的叢集,特點在於他的分散式演算法不是一致性 hash,而是 hash 槽的概念,以及自身支援節點設定從節點。具體看官方文件介紹。
  • 在業務程式碼層實現,起幾個毫無關聯的 redis 例項,在程式碼層,對 key 進行 hash 計算,然後去對應的redis 例項操作資料。這種方式對 hash 層程式碼要求比較高,考慮部分包括,節點失效後的替代演算法方案,資料震盪後的自動指令碼恢復,例項的監控,等等。
  • Java 架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm 效能調優、Spring 原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx 等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

10、Redis 叢集方案什麼情況下會導致整個叢集不可用?

有 A,B,C 三個節點的叢集,在沒有複製模型的情況下,如果節點 B 失敗了,那麼整個叢集就會以為缺少5501-11000 這個範圍的槽而不可用。

11、MySQL 裡有 2000w 資料,redis 中只存 20w 的資料,如何保證 redis 中的資料都是熱點資料?

redis 記憶體資料集大小上升到一定大小的時候,就會施行資料淘汰策略。

其實面試除了考察 Redis,不少公司都很重視高併發高可用的技術,特別是一線網際網路公司,分散式、

JVM、spring 原始碼分析、微服務等知識點已是面試的必考題。文末分享給大家一線網際網路公司最新的技術知識(彩蛋)

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

12、Redis 有哪些適合的場景?

(1)會話快取(Session Cache)

最常用的一種使用 Redis 的情景是會話快取(sessioncache),用 Redis 快取會話比其他儲存(如Memcached)的優勢在於:Redis 提供持久化。當維護一個不是嚴格要求一致性的快取時,如果使用者的購物車資訊全部丟失,大部分人都會不高興的,現在,他們還會這樣嗎?

幸運的是,隨著 Redis 這些年的改進,很容易找到怎麼恰當的使用 Redis 來快取會話的文件。甚至廣為人知的商業平臺 Magento 也提供 Redis 的外掛。

(2)全頁快取(FPC)

除基本的會話 token 之外,Redis 還提供很簡便的 FPC 平臺。回到一致性問題,即使重啟了 Redis 例項,因為有磁碟的持久化,使用者也不會看到頁面載入速度的下降,這是一個極大改進,類似 PHP 本地FPC。

再次以 Magento 為例,Magento 提供一個外掛來使用 Redis 作為全頁快取後端。

此外,對 WordPress 的使用者來說,Pantheon 有一個非常好的外掛 wp-redis,這個外掛能幫助你以最快速度載入你曾瀏覽過的頁面。

(3)佇列

Reids 在記憶體儲存引擎領域的一大優點是提供 list 和 set 操作,這使得 Redis 能作為一個很好的訊息佇列平臺來使用。Redis 作為佇列使用的操作,就類似於本地程式語言(如 Python)對 list 的 push/pop操作。

如果你快速的在 Google 中搜索“Redis queues”,你馬上就能找到大量的開源專案,這些專案的目的就是利用 Redis 建立非常好的後端工具,以滿足各種佇列需求。例如,Celery 有一個後臺就是使用Redis 作為 broker,你可以從這裡去檢視。

(4)排行榜/計數器

Redis 在記憶體中對數字進行遞增或遞減的操作實現的非常好。集合(Set)和有序集合(SortedSet)也使得我們在執行這些操作的時候變的非常簡單,Redis 只是正好提供了這兩種資料結構。

所以,我們要從排序集合中獲取到排名最靠前的 10 個使用者–我們稱之為“user_scores”,我們只需要像下面一樣執行即可:

當然,這是假定你是根據你使用者的分數做遞增的排序。如果你想返回使用者及使用者的分數,你需要這樣執行:

ZRANGE user_scores 0 10 WITHSCORESAgora Games 就是一個很好的例子,用 Ruby 實現的,它的排行榜就是使用 Redis 來儲存資料的,你可以在這裡看到。

(5)釋出/訂閱

最後(但肯定不是最不重要的)是 Redis 的釋出/訂閱功能。釋出/訂閱的使用場景確實非常多。我已看見人們在社交網路連線中使用,還可作為基於釋出/訂閱的指令碼觸發器,甚至用 Redis 的釋出/訂閱功能來建立聊天系統!

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

13、Redis 支援的 Java 客戶端都有哪些?官方推薦用哪個?

Redisson、Jedis、lettuce 等等,官方推薦使用 Redisson。

14、Redis 和 Redisson 有什麼關係?

15、Jedis 與 Redisson 對比有什麼優缺點?

Jedis 是 Redis 的 Java 實現的客戶端,其 API 提供了比較全面的 Redis 命令的支援;

Redisson 實現了分散式和可擴充套件的 Java 資料結構,和 Jedis 相比,功能較為簡單,不支援字串操作,不支援排序、事務、管道、分割槽等 Redis 特性。Redisson 的宗旨是促進使用者對 Redis 的關注分離,從而讓使用者能夠將精力更集中地放在處理業務邏輯上。

16、說說 Redis 雜湊槽的概念?

Redis 叢集沒有使用一致性 hash,而是引入了雜湊槽的概念,Redis 叢集有 16384 個雜湊槽,每個 key 通過 CRC16 校驗後對 16384 取模來決定放置哪個槽,叢集的每個節點負責一部分 hash 槽。

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

17、Redis 叢集的主從複製模型是怎樣的?

為了使在部分節點失敗或者大部分節點無法通訊的情況下叢集仍然可用,所以叢集使用了主從複製模型,每個節點都會有 N-1 個複製品.

18、Redis 叢集會有寫操作丟失嗎?為什麼?

Redis 並不能保證資料的強一致性,這意味這在實際中叢集在特定的條件下可能會丟失寫操作。

19、Redis 叢集之間是如何複製的?

非同步複製

20、Redis 叢集最大節點個數是多少?

16384 個

21、Redis 叢集如何選擇資料庫?

Redis 叢集目前無法做資料庫選擇,預設在 0 資料庫。

22、Redis 中的管道有什麼用?

一次請求/響應伺服器能實現處理新的請求即使舊的請求還未被響應,這樣就可以將多個命令傳送到伺服器,而不用等待回覆,最後在一個步驟中讀取該答覆。

這就是管道(pipelining),是一種幾十年來廣泛使用的技術。例如許多 POP3 協議已經實現支援這個功能,大大加快了從伺服器下載新郵件的過程。

23、怎麼理解 Redis 事務?

事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行,事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。事務是一個原子操作:事務中的命令要麼全部被執行,要麼全部都不執行。

24、Redis 事務相關的命令有哪幾個?

MULTI、EXEC、DISCARD、WATCH

25、Redis key 的過期時間和永久有效分別怎麼設定?

EXPIRE 和 PERSIST 命令

26、Redis 如何做記憶體優化?

儘可能使用散列表(hashes),散列表(是說散列表裡面儲存的數少)使用的記憶體非常小,所以你應該儘可能的將你的資料模型抽象到一個散列表裡面。

比如你的 web 系統中有一個使用者物件,不要為這個使用者的名稱,姓氏,郵箱,密碼設定單獨的 key,而是應該把這個使用者的所有資訊儲存到一張散列表裡面。

27、Redis 回收程序如何工作的?

一個客戶端運行了新的命令,添加了新的資料。Redi 檢查記憶體使用情況,如果大於 maxmemory 的限制, 則根據設定好的策略進行回收。一個新的命令被執行,等等。

所以我們不斷地穿越記憶體限制的邊界,通過不斷達到邊界然後不斷地回收回到邊界以下。

如果一個命令的結果導致大量記憶體被使用(例如很大的集合的交集儲存到一個新的鍵),不用多久記憶體限制就會被這個記憶體使用量超越。

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

28.加鎖機制

29.鎖互斥機制

30.watch dog 自動延期機制

31.可重入加鎖機制

32.釋放鎖機制

33.上述 Redis 分散式鎖的缺點

34.使用過 Redis 分散式鎖麼,它是怎麼實現的?

先拿 setnx 來爭搶鎖,搶到之後,再用 expire 給鎖加一個過期時間防止鎖忘記了釋放。

如果在 setnx 之後執行 expire 之前程序意外 crash 或者要重啟維護了,那會怎麼樣?

set 指令有非常複雜的引數,這個應該是可以同時把 setnx 和 expire 合成一條指令來用的!

35.使用過 Redis 做非同步佇列麼,你是怎麼用的?有什麼缺點?

般使用 list 結構作為佇列,rpush 生產訊息,lpop 消費訊息。當 lpop 沒有訊息的時候,要適當 sleep一會再重試。

缺點:

  • 在消費者下線的情況下,生產的訊息會丟失,得使用專業的訊息佇列如 rabbitmq 等。
  • 能不能生產一次消費多次呢?
  • 使用 pub/sub 主題訂閱者模式,可以實現 1:N 的訊息佇列。

36.什麼是快取穿透?如何避免?什麼是快取雪崩?何如避免?

快取穿透

一般的快取系統,都是按照 key 去快取查詢,如果不存在對應的 value,就應該去後端系統查詢(比如DB)。一些惡意的請求會故意查詢不存在的 key,請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。

如何避免?

1:對查詢結果為空的情況也進行快取,快取時間設定短一點,或者該 key 對應的資料 insert 了之後清理快取。

2:對一定不存在的 key 進行過濾。可以把所有的可能存在的 key 放到一個大的 Bitmap 中,查詢時通過該 bitmap 過濾。

快取雪崩

當快取伺服器重啟或者大量快取集中在某一個時間段失效,這樣在失效的時候,會給後端系統帶來很大壓力。導致系統崩潰。

如何避免?

1:在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。比如對某個 key 只允許一個執行緒查詢資料和寫快取,其他執行緒等待。

2:做二級快取,A1 為原始快取,A2 為拷貝快取,A1 失效時,可以訪問 A2,A1 快取失效時間設定為短期,A2 設定為長期

3:不同的 key,設定不同的過期時間,讓快取失效的時間點儘量均勻

Redis擴充套件面試題

37.redis 和 memcached 什麼區別?為什麼高併發下有時單執行緒的 redis 比多執行緒的memcached 效率要高?

38.使用 redis 如何設計分散式鎖?說一下實現思路?使用 zk 可以嗎?如何實現?這兩種有什麼區別?

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

39.知道 redis 的持久化嗎?底層如何實現的?有什麼優點缺點?

40.快取穿透、快取擊穿、快取雪崩解決方案?

41.在選擇快取時,什麼時候選擇 redis,什麼時候選擇 memcached?

42.Redis 常見的效能問題和解決方案

43.Redis 的資料淘汰策略有哪些

44.Redis 當中有哪些資料結構

45.使用 Redis 做過非同步佇列嗎,是如何實現的

46.Redis 如何實現延時佇列

面試題整理

由於篇幅過長的原因,為了不影響大家的閱讀效果,文中沒有給到所有的答案。我這裡以檔案的形式整理好了,需要借閱的程式設計師朋友可以免費來領取。

面試檔案獲取方式:

轉發+關注我,點選連結加入群聊【架構群雄角逐】:https://jq.qq.com/?_wv=1027&k=5dPjJhe(助你金三銀四能跳槽漲薪)

收集了還有你不知道的其它面試題(springboot、mybatis、併發、java中高階面試總結等)

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

46道史上最全Redis面試題,面試官能問的都被我找到了(含答案)

相關推薦

46Redis試題面試官能找到答案

開發十年,就只剩下這套架構體系了! >>>   

分享30Redis試題面試官能到的找到

1、什麼是Redis?簡述它的優缺點? Redis本質上是一個Key-Value型別的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料flush到硬碟上進行儲存。 因為是純記憶體操作,Redis的效能非常出色

Redis試題

1、什麼是Redis?2、Redis相比memcached有哪些優勢?3、Redis支援哪幾種資料型別?4、Redis主要消耗什麼物理資源?5、Redis的全稱是什麼?6、Redis有哪幾種資料淘汰策略?7、Redis官方為什麼不提供Windows版本?8、一個字串型別的值能

30Redis試題面試官能找到

1、什麼是Redis?簡述它的優缺點? Redis本質上是一個Key-Value型別的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料flush到硬碟上進行儲存。 因為是純記憶體操作,Redis的效能非常出色,每

值得看|30Redis試題面試官能找到

作者: 程式之心 連結:https://www.toutiao.com/i6579771325819126275/ 1、什麼是Redis?簡述它的優缺點? Redis本質上是一個Key-Value型別的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶

python試題詳解 附帶詳細答案關注、持續更新

23、re的match和search區別? re.match()從開頭開始匹配string。 re.search()從anywhere 來匹配string。 # 多行模式>>> re.match('X', 'A\nB\nX', re.MULTILINE) # No ma

python試題詳解附帶詳細答案關注、持續更新

38、面向物件深度優先和廣度優先是什麼?     39、面向物件中super的作用? 40、是否使用過functools中的函式?其作用是什麼? 1 Python自帶的 functools 模組提供了一些常用的高階函式,也就是用於處理其它函式的特殊函式。

Java試題帶全部答案

轉載:https://blog.csdn.net/linzhiqiang0316/article/details/80473906 今天要談的主題是關於求職,求

Java試題帶全部答案你可能要收藏!

原文地址:前幾天,有朋友去面試之前問我關於後端架構相關的問題,但奈於我去年更多的工作是在移動SDK開發上,對此有所遺忘,實屬無奈,後面準備總結下.今天要談的主題是關於求職.求職是在每個技術人員的生涯中都要經歷多次,對於我們大部分人而言,在進入自己心儀的公司之前少不了準備工作,

java試題

ast 一秒 正整數 inject reg ret 讀寫鎖 catch 每天 基本概念 操作系統中 heap 和 stack 的區別 什麽是基於註解的切面實現 什麽是 對象/關系 映射集成模塊 什麽是 Java 的反射機制

這可能是 Redis 高可用解決方案總結

一、常見使用方式 Redis 的幾種常見使用方式包括: Redis 單副本; Redis 多副本(主從); Redis Sentinel(哨兵); Redis Cluster; Redis 自研。 二、各種使用方式的優缺點 1、Redis 單副本 Redis

金九銀十強 Java 試題整理。

dir db2 計算 2.0 dad map rec 比較 ef6 以下會重新整理所有 Java 系列面試題答案、及各大互聯網公司的面試經驗,會從以下幾個方面匯總,本文會長期更新。 Java 面試篇 史上最全 Java 面試題,帶全部答案 史上最全 69 道 Spring

各種簡歷模板自薦信模板和麵試技巧

  網上找了半天,找到喜歡的模版不是要積分就是開會員,於是我就去買了一些,無私的分享給大家,不需要的就不要浪費雲盤空間了。   表 格 簡 歷 連結:https://pan.baidu.com/s/1o8vGab4 密碼:3uj8   封面模板 連結:h

opencv原始碼解讀opencv原始碼詳細解讀目錄

opencv原始碼主要是基於adaboost演算法,進行人臉的haar分類器訓練!在我近兩個月的研究opencv原始碼的過程很枯燥,也有很多收穫,在我部落格中也寫了不少文章,比較亂,現在整理一下目錄如下,大家可以直接點開連結的。這樣一方面可以方便自己查閱,另一方面也是回報

2018最新Web前端經典面試試題答案-前端面試題(答案)

近期總結一一些面試題 都是企業的面試題筆記題感覺薪資10k下的都會出筆試題   特別高的薪資都是直接技術面試或者是 現場程式設計 總結很多人的面試題,後期會對於單個知識點再說筆記詳細講解。部分都是百度的答案,不是特全面的,可以自己找下紅色為常見面試題=============

試題:2018Redis試題整理

基本數據 系統 此刻 永久 操作 中一 nvic mas syn 1、什麽是Redis?Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key-value數據庫。 Redis 與其他 key - value 緩存產品有以下三個特點:Redis支持數據的持久化,可

NBA炫酷的紫色球衣誕生 湖人比下去

@央廣軍事11月10日訊息,2018中國航展上首次公開展出的“瞭望者Ⅱ”察打一體導彈無人艇,是剛剛成功進行首發導彈飛行試驗命中靶心的實艇,試驗成功後隨即吊裝到展位與公眾見面。據媒體此前報道,該艇是中國第一艘導彈無人艇,也是繼以色列拉斐爾海上騎士後全球第二個成功發射導彈的無人艇,填補了國內導彈無人艇這一技術空白

阿里p8架構師分享:502018年經典的試題標準答案

(一小部分題的答案被我略作改動) 1、什麼是執行緒區域性變數? 執行緒區域性變數是侷限於執行緒內部的變數,屬於執行緒自身所有,不在多個執行緒間共享。Java 提供 ThreadLocal 類來支援執行緒區域性變數,是一種實現執行緒安全的方式。但是在管理環境下(如 web

【軟體測試 Python自動化】全網大廠試題看完以後你就是面試官!

前言 為了讓大家更好的理解和學習投入到Python自動化來找到一份好的資料也是學習過程中,非常重要的一個點。你的檢索能力越強,你就會越容易找到最合適你的資料。 有需要的小夥伴可以複製群號 313782132 這裡可免費領取! 暗號:部落格。 一、什麼是相容性測試?相容性測試側重哪些方面? 參考答案:

50 Redis 試題答案

1、什麼是Redis? Redis本質上是一個Key-Value型別的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料flush到硬碟上進行儲存。因為是純記憶體操作,Redis的效能非常出色,每秒可以處理超過 10