Redis必備面試題《基礎篇》

来源:https://www.cnblogs.com/weigy/archive/2019/11/13/11845335.html
-Advertisement-
Play Games

Date:2019-11-12 讀前思考: 面試官會問什麼樣的問題? 所問的問題背後真實的套路是什麼? 喜歡問Redis哪些問題? 如何順暢回答面試問的問題?弔打面試官。 1、什麼是Redis? 2、Redis相比memcached有哪些優勢? 3、Redis支持哪幾種數據類型? 4、Redis的緩 ...


Date:2019-11-12

讀前思考:

    面試官會問什麼樣的問題?

    所問的問題背後真實的套路是什麼?

    喜歡問Redis哪些問題?

    如何順暢回答面試問的問題?弔打面試官。

 

1、什麼是Redis?

   Redis的全稱是Remote Dictionary Server,Redis本質上是一個key_value類型的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫數據刷新到硬碟上進行保存。因為是純記憶體操作,Redis的性能非常出色,每秒可以處理超過10萬次的讀寫操作,是已知性能最快的Key-Value DB。

 

2、Redis相比memcached有哪些優勢,區別?

    首先從redis的好處說起, 

     (1) 速度快,因為數據存在記憶體中,類似於HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1)

     (2) 支持豐富數據類型,支持string,list,set,sorted set,hash

     (3) 支持事務,操作都是原子性,所謂的原子性就是對數據的更改要麼全部執行,要麼全部不執行

     (4) 豐富的特性:可用於緩存,消息,按key設置過期時間,過期後將會自動刪除

   Redis相比memcached的優勢:

      (1) memcached所有的值均是簡單的字元串,redis作為其替代者,支持更為豐富的數據類型

      (2) redis的速度比memcached快很多

      (3) redis可以持久化其數據,可以將記憶體中的數據保存在磁碟中,重啟的時候可以再次載入進行使用;

      (4)Redis支持數據的備份,即master-slave模式的數據備份

 記憶體使用效率對比:

    1.簡單的key-value存儲,memcached的記憶體利用率更高,而如果redis採用hash結構存儲key-value,記憶體利用率會遠高於memcached,因為hash組合了壓縮方式;
    2.memcached使用預分配的記憶體池的方式,且在記憶體仍然有很大空間時,新的數據也可能會被剔除,而redis使用現場申請記憶體的方式來存儲數據,不會剔除任何非臨時數據 redis更適合作為存儲而不是cache。    其他區別:

          1)存儲方式

                Memecache把數據全部存在記憶體之中,斷電後會掛掉,數據不能超過記憶體大小。 Redis有部份存在硬碟上,這樣能保證數據的持久性。

          2)數據支持類型

          Memcache對數據類型支持相對簡單。

         Redis有複雜的數據類型。

         3)使用底層模型不同

            它們之間底層實現方式 以及與客戶端之間通信的應用協議不一樣。Redis直接自己構建了VM 機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求。

        4)value大小

    redis最大可以達到1GB,而memcache只有1MB

 

3、Redis支持哪幾種數據類型?

 

4、Redis的緩存失效策略和主鍵失效機制?

 

5、Redis的全稱是什麼?

 

6、Redis有哪幾種數據淘汰策略?

 

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

 

8、一個字元串類型的值能存儲最大容量是多少?

 

9、為什麼Redis需要把所有數據放到記憶體中?

 

10、Redis集群方案應該怎麼做?都有哪些方案?

 

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

 

12、MySQL里有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據?

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

 

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

 

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

 

15、Redis和Redisson有什麼關係?

 

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

 

17、Redis如何設置密碼及驗證密碼?

 

18、說說Redis哈希槽的概念?

 

19、Redis集群的主從複製模型是怎樣的?

 

20、Redis集群會有寫操作丟失嗎?為什麼?

 

21、Redis集群之間是如何複製的?

 

22、Redis集群最大節點個數是多少?

 

23、Redis集群如何選擇資料庫?

 

24、怎麼測試Redis的連通性?

 

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

 

26、怎麼理解Redis事務?

 

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

 

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

 

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

 

30、Redis回收進程如何工作的?

 

31、Redis回收使用的是什麼演算法?

 

32、Redis如何做大量數據插入?

 

33、為什麼要做Redis分區?

 

34、你知道有哪些Redis分區實現方案?

 

35、Redis分區有什麼缺點?

 

36、Redis持久化數據和緩存怎麼做擴容?redis持久化的幾種方式? Redis如何做持久化的?

 

37、分散式Redis是前期做還是後期規模上來了再做好?為什麼?

 

38、Twemproxy是什麼?

 

39、支持一致性哈希的客戶端有哪些?

 

40、Redis與其他key-value存儲有什麼不同?

 

41、Redis的記憶體占用情況怎麼樣?

 

42、都有哪些辦法可以降低Redis的記憶體使用情況呢?

 

43、查看Redis使用情況及狀態信息用什麼命令?
info

44、Redis的記憶體用完了會發生什麼?

 

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


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


47、為什麼Redis需要把所有數據放到記憶體中?

Redis為了達到最快的讀寫速度將數據都讀到記憶體中,並通過非同步的方式將數據寫入磁碟。所以redis具有快速和數據持久化的特征。如果不將數據放在記憶體中,磁碟I/O速度為嚴重影響redis的性能。在記憶體越來越便宜的今天,redis將會越來越受歡迎。 如果設置了最大使用的記憶體,則數據已有記錄數達到記憶體限值後不能繼續插入新值。

 

48、Redis集群方案應該怎麼做?都有哪些方案?

 

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

 

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

 

51、Redis和Redisson有什麼關係?

 

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

 

53、說說Redis哈希槽的概念?

 

54、Redis集群的主從複製模型是怎樣的?

 

55、Redis集群會有寫操作丟失嗎?為什麼?

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


56、Redis集群最大節點個數是多少?


57、Redis集群如何選擇資料庫?


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


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


60、Redis回收進程如何工作的?


61、 使用過Redis分散式鎖麽,它是什麼回事?


62、 假如Redis裡面有1億個key,其中有10w個key是以某個固定的已知的首碼開頭的,如果將它們全部找出來?


63、 如果這個redis正在給線上的業務提供服務,那使用keys指令會有什麼問題?


64、 使用過Redis做非同步隊列麽,你是怎麼用的?


65、 redis如何實現延時隊列?


66、 如果有大量的key需要設置同一時間過期,一般需要註意什麼


67、 Pipeline有什麼好處,為什麼要用pipeline?


68、 Redis的同步機制瞭解麽?


69、 是否使用過Redis集群,集群的原理是什麼?


70、 為什麼redis需要把所有數據放到記憶體中?


71、 Redis為什麼是單進程單線程的?


72、 redis的併發競爭問題如何解決?


73、 redis事物的瞭解CAS(check-and-set 操作實現樂觀鎖 )?


74、 WATCH命令和基於CAS的樂觀鎖?


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 根據.frm和.ibd文件恢復表結構和數據 ...
  • 解決方案:(參考以下命令) 1、打開cmd,切換到mysql的bin目錄下 2、 D:\Program Files\MySQL5.1\bin mysqld.exe install Service successfully installed. 3、 D:\Program Files\MySQL5.1 ...
  • 1. GTID優缺點 MySQL傳統點位複製在5.7版本前是主要的主從複製模式,而隨著MySQL5.6版本引入GTID,並且MySQL5.7進行各方面的優化以後,在mySQL5.7(尤其是MySQL5.7.6)版本後GTID模式的主從複製方式成為一個新的選擇方式。要使用GTID模式,首先也需知其優缺 ...
  • [TOC] MyBatis簡單介紹 MyBatis是一個持久層框架,使用簡單,學習成本較低。可以執行自己手寫的SQL語句,比較靈活。但是MyBatis的自動化程度不高,移植性也不高,有時從一個資料庫遷移到另外一個資料庫的時候需要自己修改配置。 一個Mybatis最簡單的使用列子如下: 從配置文件(通 ...
  • 題目描述 設定有一個資料庫,裡面有4張表: 學生表(student) 課程表(course) 成績表(score) 教師信息表(teacher) 表結構如下: 表一_學生表(student) 屬性名數據類型含 義 sno int 學號(主鍵) sname varchar 學生姓名 ssex varc ...
  • 修改分區表主鍵時報錯: 在行: 2 上開始執行命令時出錯 -alter table KC23 modify AAZ210 VARCHAR2(50)錯誤報告 -SQL 錯誤: ORA-14061: 不能更改索引分區列的數據類型或長度14061. 00000 - "data type or length ...
  • 資料庫加鎖是修改哪一條加鎖,還是在頁上加鎖,還是在表上加鎖,資料庫來決定 如果你更改的是兩條記錄,就在兩條記錄上加鎖,如果你更改的是很多條,這個時候資料庫一看一條一條加鎖太麻煩,給整個頁加鎖更省事,或者給整個表加鎖更加省事 加鎖的級別越大,資料庫越省事,資料庫越省事,併發性越差,修改一條記錄如果給表 ...
  • 問題: 1.在頁面存入中文後亂碼,從前端從後臺發現數據未發生異常,發現是存入資料庫後亂碼; 經查詢該欄位為text欄位,存入中文會亂碼 如圖 解決辦法: 1.將text轉為varchar或nvarchar,再修改為ntext alter table ReportSpec alter column c ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...