在找工作的過程中,對于 Redis 技術知識的掌握已經成為必須的技能。美團面試常常就會被問到Redis相關知識,而這次我就差點掛在了美團3面,面試官連問我以下幾個Redis的問題,然后就卡殼了...
- redis了解嗎?Redis key 的過期策略Redis了解嗎?你說說怎么用redis實現分布式鎖?
- Redis常用數據結構及底層數據結構實現
- 如何解決 Redis 的并發競爭 Key 問題
- 如何保證緩存與數據庫雙寫時的數據一致性?
- Redis 持久化有哪幾種方式,怎么選?
- Redis 的 zset 怎么實現的?
- Redis 主從同步是怎樣的過程?
- ... ...(剩下的不太記得了...為此面試完回來針Redis專門做了一個大總結)
01 Redis面試問題常見劃分(6個部分,附帶完整的答案解析)
第一部分:Redis 的概念理解
第二部分:Redis 數據結構與指令
第三部分:Redis 高并發處理策略
第四部分:Redis 集群結構以及設計理念
第五部分:Redis 緩存管理與持久化機制
第六部分:Redis 應用場景設計
注意:前面例舉了所有的問題,在先不看解析的條件下,可先自行試水。。解析在最后。。此外,筆記是全程手寫出來的,希望大家拿到筆記后別丟進收藏夾吃灰!??
1.1 Redis面試問題:第一部分:Redis 的概念理解
- 什么是 Redis?
- Redis 的特點有哪些?
- Memcache 與 Redis 的區別都有哪些?
- Redis 相比 Memcached 有哪些優勢?
- 如何實現本地緩存?請描述一下你知道的方式
- Redis 通訊協議是什么?有什么特點?
1.2 Redis面試問題:第二部分:Redis 數據結構與指令
- Redis 支持的數據類型
- Redis 常用的命令有哪些?
- 一個字符串類型的值能存儲最大容量是多少?
- Redis 各個數據類型最大存儲量分別是多少?
- 請介紹一下 Redis 的數據類型 SortedSet(zset)以及底層實現機制?
- Redis 事務相關命令有哪些?
- 什么是 Redis 事務?原理是什么?
- Redis 事務的注意點有哪些?
- Redis 為什么不支持回滾?
- 請介紹一下 Redis 的 Pipeline(管道),以及使用場景
- 請說明一下 Redis 的批量命令與 Pipeline 有什么不同?
- 請介紹一下 Redis 的發布訂閱功能
- Redis 的鏈表數據結構的特征有哪些?
- 請介紹一下 Redis 的 String 類型底層實現?
- Redis 的 String 類型使用 SSD 方式實現的好處?
- 設置鍵的生存時間和過期時間有哪些命令?
1.3 Redis面試問題:第二部分:第三部分:Redis 高并發處理策略
- 為什么 Redis 需要把所有數據放到內存中?
- Redis 是單線程的嗎?
- Redis 為什么設計成單線程的?
- 什么是緩存穿透?怎么解決?
- 什么是緩存雪崩? 怎么解決?
- 緩存的更新策略有幾種?分別有什么注意事項?
- 請介紹幾個可能導致 Redis 阻塞的原因
- 怎么去發現 Redis 阻塞異常情況?
1.4 Redis面試問題:第二部分:第四部分:Redis 集群結構以及設計理念
- Redis 集群架構模式有哪幾種?
- Redis 集群最大節點個數是多少?
- Redis 集群的主從復制模型是怎樣的?
- 請介紹一下 Redis 集群實現方案
- Redis 集群會有寫操作丟失嗎?為什么?
- Redis 慢查詢是什么?通過什么配置?
- Redis 的慢查詢修復經驗有哪些?怎么修復的?
- 如何優化 Redis 服務的性能?
- Redis 的主從復制模式有什么優缺點?
- Redis sentinel(哨兵)模式優缺點有哪些?
- 如何設置 Redis 的最大連接數?查看 Redis 的最大連接數?查看 Redis 的當前
- 介紹一些 Redis 常用的安全設置?
1.5 Redis面試問題:第二部分:第五部分:Redis 緩存管理與持久化機制
- Redis 持久化機制有哪些?
- Redis 持久化機制 AOF 和 RDB 有哪些不同之處?
- 請介紹一下 RDB 持久化機制的優缺點
- 請介紹一下 AOF 持久化機制的優缺點
- 如果 AOF 文件的數據出現異常, Redis 服務怎么處理?
- 常見的淘汰算法有哪些?
- Redis 淘汰策略有哪些?
- Redis 緩存失效策略有哪些?
- Redis 如何做內存優化?
- 什么是 bigkey? 有什么影響?
- 怎么發現 bigkey?
- Redis 的內存消耗分類有哪些?內存統計使用什么命令?
- 簡單介紹一下 Redis 的內存管理方式有哪些?
- 如何設置 Redis 的內存上限?有什么作用?
- Redis 報內存不足怎么處理?
1.6 Redis面試問題:第六部分:Redis 應用場景設計
- Redis 適用場景有哪些?
- Redis 常用的業務場景有哪些?
- Redis 支持的 Java 客戶端有哪些? 簡單說明一下特點。
- 請簡單描述一下 Jedis 的基本使用方法?
- Jedis 連接池鏈接方法有什么優點?
- 什么是分布式鎖?有什么作用?
- 分布式鎖可以通過什么來實現?
- 介紹一下分布式鎖實現需要注意的事項?
- Redis 怎么實現分布式鎖?
- 緩存命中率表示什么?
- 怎么提高緩存命中率?
- 請介紹一下 Spring 注解緩存
總共是從Redis的概念理解、數據結構與指令、高并發處理策略、集群結構以及設計理念、緩存管理與持久化機制、應用場景設計等六大部分整理了以上的70高頻問,答案解析總共是有25頁(如下圖所示),篇幅有限沒法全部在文章中寫上(后面還有手寫筆記等),但可分享給需要的朋友 ??
Redis總結免費下載地址(點擊皆可):面試解析+手寫筆記+進階pdf
02 一份純手寫的Redis筆記
這是從朋友那里拿過來的,看了之后感覺還是挺不錯的。整個筆記分為五個部分: 第一部分:Redis基礎篇 第二部分:Redis數據結構篇 第三部分:Redis持久化篇 第四部分:Redis集群篇 第五部分:Redis的其他問題
2.1 第一部分:Redis基礎篇
- 什么是Redis ?mRedis優缺點
- 為什么要用緩存?為什么使用Redis?
- 使用緩存會出現什么問題?
- Redis為什么早期版本選擇單線程?
- Redis為什么這么快?
2.2 第二部分:Redis數據結構篇
- Redis常用數據結構及實現?
- Redis 的 SDS 和C中字符串相比的優勢?
- 字典是如何實現的? Rehash了解嗎?
- 跳躍表是如何實現的?原理?
- HyperLogLog有了解嗎?
- 布隆過濾器有了解嗎?
- GeoHash了解嗎?
- 壓縮列表了解嗎?
- 快速列表quicklist了解嗎?
- Stream結構有了解嗎?
2.3 第三部分:Redis持久化篇
- 什么是持久化?
- Redis中的兩種持久化方式?
- RDB和AOF各自有什么優缺點?
- 兩種方式如何選擇?
- Redis 的數據恢復
2.4 第四部分:Redis集群篇
- 主從同步了解嗎?
- 哨兵模式了解嗎?
- Redis集群使用過嗎?原理?
- 集群中數據如何分區?
- 節點之間的通信機制了解嗎?
- 集群數據如何存儲的有了解嗎?
2.5 第五部分:Redis的其他問題
- Redis 如何實現分布式鎖?
- Redis過期鍵的刪除策略?
- Redis的淘汰策略有哪些?
- Redis常見性能問題和解決方案?
03 Redis進階必看:《Redis實戰》+《Redis設計與實現》
3.1 《Redis實戰》
深入淺出地介紹了Redis的5種數據類型,并通過多個實用示例展示了Redis用法。除此之外,還講述了Redis 的優化方法以及擴展方法,對于學習和使用Redis來說不可多得的參考筆記。
本筆記一共由三個部分組成:
第一部分 入門:對Redis進行了介紹,說明了Redis 的基本使用方法、它擁有的5種數據結構以及操作這5種數據結構的命令,并講解了如何使用Redis去構建文章聚合網站、cookie、購物車、網頁緩存、數據庫行緩存等一系列程序;
- 第1章 初識Redis
- 第2章 使用Redis構建Web應用
第二部分 核心概念: 對Redis命令進行了更詳細的介紹,并展示了如何使用Redis去構建更為復雜的輔助工具和應用程序,并在最后展示了如何使用Redis去構建一個簡單的社交網站;
- 第3章 Redis命令
- 第4章 數據安全與性能保障
- 第5章 使用Redis構建支持程序
- 第6章 使用Redis構建應用程序組件
- 第7章 基于搜索的應用程序
- 第8章 構建簡單的社交網站
第三部分 進階內容:對Redis用戶經常會遇到的一些問題進行了介紹,講解了降低Redis內存占用的方法、擴展Redis性能的方法以及使用Lua語言進行腳本編程的方法;
- 第9章 降低內存占用
- 第10章 擴展Redis
- 第11章 Redis的Lua腳本編程
3.2 《Redis設計與實現》
全面而完整地講解了Redis的內部機制與實現方式,對Redis的大多數單機功能以及所有多機功能的實現原理進行了介紹,展示了這些功能的核心數據結構以及關鍵的算法思想,圖示豐富,描述清晰,并給出大量參考信息。通過閱讀,讀者可以快速、有效地了解Redis的內部構造以及運作機制,更好、更高效地使用Redis。
本筆記主要分為四大部分:
第一部分“數據結構與對象”:介紹了Redis 中的各種對象及其數據結構,并說明這些數據結構如何影響對象的功能和性能;
- 第二章 簡單動態字符串
- 第三章 鏈表
- 第四章 字典
- 第五章 跳躍表
- 第六章 整數集合
- 第七章 壓縮列表
- 第八章 對象
第二部分“單機數據庫的實現”:對Redis實現單機數據庫的方法進行了介紹,包括數據庫、RDB持久化、AOF持久化、事件等;
- 第九章 數據庫
- 第十章 RDB持久化
- 第十一章 AOF持久化
- 第十二章 事件
- 第十三章 客戶端
- 第十四章 服務器
第三部分“多機數據庫的實現”:對Redis的Sentinel、復制、集群三個多機功能進行了介紹;
- 第十五章 復制
- 第十六章 Sentinel
- 第十七章 集群
第四部分“獨立功能的實現對Redis”: 中各個相對獨立的功能模塊進行了介紹,涉及發布與訂閱、事務、Lua腳本、排序、二進制位數組、慢查詢日志、監視器等;
- 第十八章 發布與訂閱
- 第十九章 事務
- 第二十章 Lua腳本
- 第二十一章 排序
- 第二十二章 二進制位數組
- 第二十三章 慢查詢日志
- 第二十四章 監視器
總而言之,面試官問來問去,問的那些Redis知識點也就這么多吧,許是我復習的不夠到位,知識點掌握不夠熟練,所以面試才會卡殼。將這些Redis面試知識解析以及我整理的一些學習筆記分享出來給大家參考學習,希望你們不要像我一樣(??)
整理不易,覺得有幫助的朋友可以幫忙點贊分享支持一下小編~
你的支持,我的動力;祝各位前程似錦,offer不斷!!!