為什么要用Redis?一定要用Redis嗎?


轉載於:https://mp.weixin.qq.com/s/y3-vo-pwSF1ogjjofJFdNA

前段時間,有個人吐槽自己的同事是上古程序猿,一直堅持反對使用Redis。那位上古程序猿設計公司的業務系統時候,始終堅持永遠不要用緩存(其他人想用redis),例如做個接口防重復,一定要用數據庫來實現,包括定期失效之類的功能。對此你怎么看呢?

我們在工作中也經常會用到Redis,但是為什么要用Redis?關於Redis的一些場景和實戰問題,90%以上的人都沒有真正理解Redis。


為什么要用Redis?是不是一定要用Redis?
項目中使用Redis,主要考慮性能和並發。其實不是所有的場景都要上Redis,如果僅僅是分布式鎖這些,完全可以用中間件Zookpeer等代替。很多業務系統其實用數據庫就夠了,無腦上緩存/NOSQL可能會帶來更多更嚴重的問題。

性能:

如下圖所示,在大並發的情況下,所有的請求直接訪問數據庫,數據庫會出現連接異常。這個時候,就需要使用Redis做一個緩沖操作,讓請求先訪問到Redis,而不是直接訪問數據庫。

 

 提個問題:Redis慢查詢操作,該如何優化?

並發:

如下圖所示,在大並發的情況下,所有的請求直接訪問數據庫,數據庫會出現連接異常。這個時候,就需要使用Redis做一個緩沖操作,讓請求先訪問到Redis,而不是直接訪問數據庫。

 

 

 謹!慎!使!用!緩!存!
無數大佬都提醒我們:謹慎使用緩存!

緩存失效是計算機科學兩大難題之一(另一大難題你猜猜是啥?),緩存會掩蓋掉一些問題,甚至放大問題。

使用Redis最常遇到的問題主要就是以下4個:

1、緩存和數據庫雙寫一致性問題

2、緩存雪崩問題

3、緩存擊穿問題

4、緩存的並發競爭問題

從安全角度來說,緩存也是最容易被攻擊的薄弱點(緩存溢出攻擊,不是緩存區溢出攻擊,用大量無效的數據占滿緩存空間使得系統性能斷崖式下跌)。

所以通常做壓力測試的時候都是要求必須關閉緩存測試。

不單單是緩存,所有的中間件在解決一部分問題的同時也會帶來新的挑戰。

譬如消息隊列對於削峰填谷的功效非常明顯,但是如果峰值持續的時間遠遠的超出了估計呢?而如果這時候消息阻塞的監控還在計划中的話……

比如說分布式計算帶來了無限擴容的可能,而一致性問題很多時候會帶來非常多的麻煩。

關於Redis的這8個阿里面試題,你能否答得上來?

1.Redis相比memcached有哪些優勢?

2.Redis常見性能問題和解決方案

3.MySQL里有2000w數據,Redis中只存20w的數據,如何保證Redis中的數據都是熱點數據

4.Memcache與Redis的區別都有哪些?

5.Redis 常見的性能問題都有哪些?如何解決?

6.Redis 最適合的場景

7.Redis的同步機制了解么?

8.是否使用過Redis集群,集群的原理是什么?


Redis號稱支持並發11萬讀操作、並發8萬寫操作。由於優異的性能和方便的操作, Redis在國內各大公司都很熱門,比如新浪、阿里、騰訊、百度、美團、小米等,Redis也是大廠面試最愛問的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM