Redis面試靈魂36問,你懷疑人生嗎?(含答案)

前言:

說到面試,那就要好好準備下,不許備充分的面試,徹底是浪費時間,更是對本身的不負責。那麼面試的知識點是哪些呢?面試

通過大多數朋友面試事後的反饋,Java面試重點以下:redis

數據結構與算法,JVM內存結構、垃圾回收器、回收算法、GC、併發編程相關(多線程、線程池等)、NIO/BIO、性能優化、設計模式、Spring框架:分佈式相關:Redis、一致Hash算法、分佈式存儲、負載均衡等,微服務以及Docker容器等。算法

今天下面就列舉的是Redis的相關面試問題,看看你是否能答出來。數據庫

Redis高級面試專題

  1. 什麼是 Redis?簡述它的優缺點?
  2. Redis與memcached相比有哪些優點?
  3. Redis支持哪幾種數據類型?
  4. Redis主要消耗什麼物理資源?
  5. Redis有哪幾種數據淘汰策略?
  6. Redis官方爲何不提供Windows版本?
  7. 一個字符串類型的值能存儲最大容量是多少?
  8. 爲何Redis須要把全部數據放到內存中?
  9. Redis集羣方案應該怎麼作?都有哪些方案?
  10. Redis集羣方案什麼狀況下會致使整個集羣不可用?
  11. MySQL裏有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據?
  12. Redis有哪些適合的場景?
  13. Redis支持的Java客戶端都有哪些?官方推薦用哪一個?
  14. Redis和Redisson有什麼關係?
  15. Jedis與Redisson對比有什麼優缺點?
  16. 說說Redis哈希槽的概念?
  17. Redis集羣的主從複製模型是怎樣的?
  18. Redis集羣會有寫操做丟失嗎?爲何?
  19. Redis集羣之間是如何複製的?
  20. Redis集羣最大節點個數是多少?
  21. Redis集羣如何選擇數據庫?
  22. Redis中的管道有什麼用?
  23. 怎麼理解Redis事務?
  24. Redis事務相關的命令有哪幾個?
  25. Rediskey的過時時間和永久有效分別怎麼設置?
  26. Redis如何作內存優化?
  27. Redis回收進程如何工做的?
  28. 加鎖機制
  29. 鎖互斥機制
  30. watchdog自動延期機制
  31. 可重入加鎖機制
  32. 釋放鎖機制
  33. 上述Redis分佈式鎖的缺點
  34. 使用過Redis分佈式鎖麼,它是怎麼實現的?
  35. 使用過Redis作異步隊列麼,你是怎麼用的?有什麼缺點?
  36. 什麼是緩存穿透?如何避免?什麼是緩存雪崩?何如避免?

面試題答案

一、什麼是 Redis?簡述它的優缺點?編程

Redis的全稱是:RemoteDictionary.Server,本質上是一個Key-Value類型的內存數據庫,很像memcached,整個數據庫通通加載在內存當中進行操做,按期經過異步操做把數據庫數據flush到硬盤上進行保存。設計模式

由於是純內存操做,Redis的性能很是出色,每秒能夠處理超過10萬次讀寫操做,是已知性能最快的Key-ValueDB。緩存

Redis的出色之處不單單是性能,Redis最大的魅力是支持保存多種數據結構,此外單個value的最大限制是1GB,不像memcached只能保存1MB的數據,所以Redis能夠用來實現不少有用的功能。比方說用他的List來作FIFO雙向鏈表,實現一個輕量級的高性能消息隊列服務,用他的Set能夠作高性能的tag系統等等。性能優化

另外Redis也能夠對存入的Key-Value設置expire時間,所以也能夠被看成一個功能增強版的memcached來用。Redis的主要缺點是數據庫容量受到物理內存的限制,不能用做海量數據的高性能讀寫,所以Redis適合的場景主要侷限在較小數據量的高性能操做和運算上。數據結構

二、Redis與memcached相比有哪些優點?多線程

  • memcached全部的值均是簡單的字符串,redis做爲其替代者,支持更爲豐富的數據類型
  • redis的速度比memcached快不少redis的速度比memcached快不少
  • redis能夠持久化其數據redis能夠持久化其數據

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

String、List、Set、SortedSet、hashes

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

內存。

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

  1. noeviction:返回錯誤當內存限制達到,而且客戶端嘗試執行會讓更多內存被使用的命令。
  2. allkeys-lru:嘗試回收最少使用的鍵(LRU),使得新添加的數據有空間存放。
  3. volatile-lru:嘗試回收最少使用的鍵(LRU),但僅限於在過時集合的鍵,使得新添加的數據有空間存放。
  4. allkeys-random:回收隨機的鍵使得新添加的數據有空間存放。
  5. volatile-random:回收隨機的鍵使得新添加的數據有空間存放,但僅限於在過時集合的鍵。
  6. volatile-ttl:回收在過時集合的鍵,而且優先回收存活時間(TTL)較短的鍵,使得新添加的數據有空間存放。

你的關注和點贊都是對筆者最大的支持。

相關文章
相關標籤/搜索