轉載於: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也是大廠面試最愛問的。