筆者去年12月中旬開始面試,面了很多大廠,有很多問題,原理掌握不牢,因此藉此對redis做乙個覆盤和總結,除了hyperloglog和geo的資料結構沒有實踐過,其他的都大概了解,簡單**模擬了一些場景。由此對我所經歷的面過redis的問題做乙個彙總。7.redis有幾種部署(架構模式)模式(主自如,貝殼)
答:單機模式,集群模式(redis-cluster),哨兵模式(redis sentinel),主從複製,客戶端分片,redis-proxy
8.redis的複製模式有幾種
答:基於記憶體的複製/基於磁碟的複製/全量複製/增量複製
9.redis的快取穿透與快取擊穿是什麼場景?怎麼解決?
答1:1.快取穿透說的是查詢乙個資料庫一定不存在的資料,也就是說資料庫不存在那快取中一定也不存在。
2.快取擊穿是指乙個key非常熱點,在不停的扛著大併發,大併發集中對這乙個點進行訪問,
當這個key在失效的瞬間,持續的大併發就穿破快取,直接請求資料庫,就像在乙個屏障上鑿開了乙個洞。
答2:1.快取穿透可以設定布隆過濾器進行過濾,另外如果有多次查詢也可以將這個不存在的資料key快取到redis中,同時設定乙個較短的過期時間,value是空。
2.快取擊穿的話其實有兩種方案
1.可以對快取查詢加鎖,如果key不存在,就加鎖,然後查db入快取,然後解鎖;其他程序如果發現有鎖就等待,然後等解鎖後返回資料或者進入db查詢
2.如何是熱點key的話,可以設定乙個較長的存活時間,或者永久不過期,這樣的話就避免了鎖的競爭。
10.redis可以用來實現什麼功能?有哪些使用場景
答:k-v快取,排行榜熱點快取,限流,分布式鎖,發布/訂閱(訊息佇列),redis事務
11.除了做k-v快取之外,redis還有哪些高階使用場景
答:k-v快取,排行榜熱點快取,限流,分布式鎖,發布/訂閱(訊息佇列),redis事務
地理位置查詢,bitmap,基於redis的布隆過濾
12.redis能做分布式訊息佇列嗎
答:能,但是不好做到高可用,簡單的訊息佇列可以支援,因為跟真正的主流訊息佇列產品來說
不能提供訊息的持久化,不能保證訊息的ack機制,也不能保證訊息的重發確認,同時不能保證高併發大資料量的情況下存在的訊息堆積問題
需要自己實現對應的策略和機制,所以比較難以實現高可用。
13.redis中的zset在專案中怎麼用?
答:需要對資料進行排序,按權重或者按分數的場景,同時保證資料的實時性和有效性
分析:筆者答的不好,因為筆者確實沒有用過,不過有一種場景可以使用,就是首頁最熱資料的展示,也是按權重計算的,
其實可以使用這種資料結構標識最熱資料id的排行。
15.redis的字串底層資料結構是怎麼樣的?
redis使用的是簡單動態字串的結構(sds),有三個部分,已用位元組長度,未用位元組長度和儲存資料的位元組陣列。
redis自身實現的字串結構有如下特點:
·o(1)時間複雜度獲取:字串長度、已用長度、未用長度。
·可用於儲存位元組陣列,支援安全的二進位制資料儲存。
·內部實現空間預分配機制,降低記憶體再分配次數。
·惰性刪除機制,字串縮減後的空間不釋放,作為預分配空間保留。
16.redis的其他資料結構有用到嗎?
答:其實有9種,常見的有5種
除了redis篇,還有其他篇的總結,後面有時間給大家分享。
近期面試題總結 一
深信服 最大公約數演算法 最小公倍數 堆排序 輪詢 預設 每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。weight 指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。例如 upstream bakend ip hash 取餘 的運用 每...
redis面試題總結
1 速度快,因為資料存在記憶體中,類似於hashmap,hashmap的優勢就是查詢和操作的時間複雜度都是o 1 2 支援豐富資料型別,支援string,list,set,sorted set,hash 3 支援事務,操作都是原子性,所謂的原子性就是對資料的更改要麼全部執行,要麼全部不執行 4 豐富...
redis常用面試題總結
jedis jedis new jedis string,int pipeline p jedis.pipelined p.set key,value 每個操作都傳送請求給redis server p.get key,value p.sync 這段 獲取所有的response 管道通過一次性寫入請求...