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的樂觀鎖?