redis面試常見問題

2021-10-09 05:46:25 字數 2358 閱讀 9260

系統哪些場景用到了快取?

商品的資訊,其實變動不大,一般一天更新一次,但是訪問量又比較大

加快取後,

利用快取提高了效能

如果後續資料變化後,系統修改了資料庫的同時,更新下快取就ok了

快取如何實現高併發

先查快取,如果快取有資料,查快取,沒有快取查資料庫,這樣可能可以將每秒4000個

請求的高併發 降為1000個請求查資料庫,3000個查快取?

為什麼資料庫不能承載每秒3000的併發,但是快取可以?

因為快取走的是記憶體,記憶體天然就可以支撐高併發的。但是資料庫一般建議併發請求不超過2000/s

比如 查詢商品,3/4的資料放快取,1/4的放資料庫

快取實現高效能

快取許多資料,複查查詢結果耗時,結果放在快取,只要資料沒變,直接查詢快取,提高使用者體驗。

不良後果

資料出現不一樣,快取併發競爭,雪崩,快取穿透

和memcached 的區別?

1)redis的擁有的資料結構和操作比memcached的多,可以支撐更多複雜的資料型別的操作

2)memcached沒有原生的集群模式,redis目前官方都支援cluster模式

資料結構多,可以支援集群

7.為什麼redis是單執行緒模型也能效率這麼高,但還是可以支撐高併發?

1.核心是採用基於非阻塞的多路復用模型

2.單執行緒避免了多執行緒直接頻繁的上下文切換

redis有哪些資料型別,分別在哪些場景下比較合適?

1)string 做最普通的set get

2)hash ,類似map的,一般用來快取物件,後續操作的時候,可以只修改物件的某個欄位的值

3)list,有序的列表,存放列表類的資料結構

4)set ,無序集合,自動去重的。如果需要對一些資料進行快速去重,可以用jvm記憶體的hashset去重,但是如果系統部署在多台機器上,那就得基於redis去進行全域性去重

5)sorted set :排序的去重

過期策略

快取時基於記憶體的,記憶體是有限的,如果你快取的資料過大,記憶體會丟棄一部分你不常用的,保留一些常用的資料

快取時可以設定過期時間的,那麼redis是如何對這個過期時間的key進行清除的呢?

1)定期刪除+惰性刪除:

首先,redis預設是每隔100ms會去抓取一批資料去進行過期檢查清除,但並不會遍歷所有的,因為遍歷所有的對cpu的消耗太高

其次:會進行惰性刪除,就是當你獲取key的時候,redis會檢查下,這個key有沒有到了過期時間,如果過期,就刪除

這樣兩種手段結合起來,保證過期的key一定會被乾掉。

2)記憶體淘汰機制

刪除訪問頻率低的資料 (lru)

刪除即將過期的資料

刪除已過期資料

為什麼我的快取資料不見了?

-寫的資料太多了,記憶體滿了,redis 直接執行了記憶體淘汰機制,lru了,給你清理掉最近很少使用的資料。

10.redis 如何保證掛掉之後重啟資料可以恢復

redis持久化,講資料寫入記憶體的同時,非同步的慢慢的將資料寫入到磁碟,如果redis宕機,重啟啟動,redis自動從磁碟上載入之前持久化的資料就可以了。

另外,還可以將磁碟的資料備份到阿里雲,如果磁碟故障的情況下,可以另起服務來支撐業務。

持久化的兩種方式 rob aof 各自的特點?適用的場景?

意義:故障恢復

快取雪崩和快取穿透?redis崩潰後會怎麼樣?

雪崩:redis宕機,由於資料庫無法承載高併發,導致整個系統宕機。

處理雪崩方案:

1)事前:保證 redis集群高可用 主從+哨兵

2)事中:redis掛了後,採用本地ehcache快取+hystrix限流&降級,避免mysql***

2)事後:redis持久化,快速恢復快取資料

快取穿透?

大量請求在資料庫中沒資料,快取中也沒有,每次都跳過快取,去查詢資料庫,把資料庫拖死(黑客攻擊)

解決方案:

每次系統a從資料庫沒查到資料,就往快取中寫乙個空值。類似 set -999 unkonwn,這樣下次再id=-999 ,就會查到快取,不會直接請求資料庫了。

12.redis如何部署的?

redis cluster 10臺機器,5臺部署redis主例項。5臺部署了reids的從例項,每個主例項掛乙個從例項。5個節點對外提供讀寫服務,每個節點的讀寫高峰qps可能達到5w的qps,

5臺機器差不多是25w的qps,機器的配置差不多是32g記憶體+8核cpu,分配給redis的10g記憶體。

因為每個例項都掛了乙個從例項,所以是高可用的,任何乙個主例項宕機,都會自動故障遷移,redis從例項都會 程式設計主例項繼續提供讀寫服務。

比如商品資料,一條資料是10kb,10w條就是1g,常駐記憶體是200w條商品資料,占用記憶體20g,不到總記憶體50%

Redis 面試常見問題

redis常見問題 為什麼使用redis 效能和併發 分布式鎖還有其他中介軟體可以代替 使用redis有什麼缺點 單執行緒的redis問什麼這麼快 redis的資料型別,以及每種資料型別的使用場景 redis 的過期策略以及記憶體淘汰機制 redis 採用定期刪除 惰性刪除策略 採用定期刪除 惰性刪...

面試 Redis面試常見問題總結

redis採用的是基於記憶體的採用的是單程序單執行緒模型的kv資料庫,由c語言編寫。官方提供的資料是可以達到100000 的qps。這個資料不比採用單程序多執行緒的同樣基於記憶體的kv資料庫memcached差。redis快的主要原因是 完全基於記憶體 資料結構簡單,對資料操作也簡單 使用多路 i ...

redis常見問題

在redis命令列執行info clients 得到類似下面的結果 connected clients 357 client longest output list 0client biggest input buf 0blocked clients 0redis連線數過多的問題可以參考 處理red...