了解一下高性能緩存資料庫Redis,再去參加面試

2021-01-15 IT猿界

尊敬的讀者,記得加關注、點讚喲,您的認可是我最大的動力,謝謝!

Redis是什麼,有哪些優缺點?

Redis,全稱Remote Dictionary Server,一個Key-Value類型的內存資料庫,整個資料庫都是加載到內存中進行操作,可以定期通過異步操作將資料庫數據保存到硬碟中進行保存。

高性能,每秒可進行超過10萬次讀寫操作,是已知最快的Key-Value資料庫。

Redis 在內存中對數字進行遞增或遞減的操作實現的非常好。集合(Set)和有序集合(SortedSet)也使得我們在執行這些操作的時候變的非常簡單,Redis 只是正好提供了這兩種數據結構。

由於是純內存操作,資料庫容量受到物理內存的限制,不能用作海量數據的高性能讀寫。

Redis 適合的場景主要局限在較小數據量的高性能操作和運算上。

Redis支持哪些數據類型

String、List、Set、Sorted Set、hashes

Redis 數據回收機制

noeviction:返回錯誤當內存限制達到,並且客戶端嘗試執行會讓更多內存被使用的命令。allkeys-lru: 嘗試回收最少使用的鍵(LRU),使得新添加的數據有空間存放。volatile-lru: 嘗試回收最少使用的鍵(LRU),但僅限於在過期集合的鍵,使得新添加的數據有空間存放。allkeys-random: 回收隨機的鍵使得新添加的數據有空間存放。volatile-random: 回收隨機的鍵使得新添加的數據有空間存放,但僅限於在過期集合的鍵。volatile-ttl: 回收在過期集合的鍵,並且優先回收存活時間(TTL)較短的鍵,使得新添加的數據有空間存放。字符串類型值存儲的最大容量

512M

Redis適合的場景

會話緩存(Session Cache)用 Redis 緩存會話比其他存儲的優勢在於:Redis 提供持久化。

全頁緩存(FPC)Redis 提供很簡便的 FPC 平臺。一致性問題,即使重啟了 Redis 實例,因為有磁碟的持久化,用戶也不會看到頁面加載速度的下降。

隊列Reids 在內存存儲引擎領域的一大優點是提供 list 和 set 操作,這使得 Redis 能作為一個很好的消息隊列平臺來使用。Redis 作為隊列使用的操作,就類似於本地程序語言(如 Python)對 list 的 push/pop操作。

排行榜/計數器Redis 在內存中對數字進行遞增或遞減的操作實現的非常好。集合(Set)和有序集合(SortedSet)也使得我們在執行這些操作的時候變得非常簡單,Redis 只是正好提供了這兩種數據結構。

發布/訂閱Redis 還有發布/訂閱功能,基於它可以建立聊天系統!

緩存穿透

一般的緩存系統,都是按照 key 去緩存查詢,如果不存在對應的 value,就應該去後端系統查找(比如DB)。一些惡意的請求會故意查詢不存在的 key,請求量很大,就會對後端系統造成很大的壓力。這就叫做緩存穿透。

避免緩存穿透

對查詢結果為空的情況也進行緩存,緩存時間設置短一點,或者該 key 對應的數據 insert 了之後清理緩存。

對一定不存在的 key 進行過濾。可以把所有的可能存在的 key 放到一個大的 Bitmap 中,查詢時通過該 bitmap 過濾。

緩存雪崩

當緩存伺服器重啟或者大量緩存集中在某一個時間段失效,這樣在失效的時候,會給後端系統帶來很大壓力。導致系統崩潰。

避免緩存雪崩

在緩存失效後,通過加鎖或者隊列來控制讀資料庫寫緩存的線程數量。比如對某個 key 只允許一個線程查詢數據和寫緩存,其他線程等待。

做二級緩存,A1 為原始緩存,A2 為拷貝緩存,A1 失效時,可以訪問 A2,A1 緩存失效時間設置為短期,A2 設置為長期。

不同的 key,設置不同的過期時間,讓緩存失效的時間點儘量均勻。

歡迎點評

相關焦點

  • 面試官:Redis緩存了解嗎?面對這11道題是否有很多問號?
    緩存掛了,此時 1 秒 5000 個請求全部落資料庫,資料庫必然扛不住,它會報一下警,然後就掛了。此時,如果沒有採用什麼特別的方案來處理這個故障,DBA 很著急,重啟資料庫,但是資料庫立馬又被新的流量給打死了。這就是緩存雪崩。
  • Redis資料庫緩存技術
    第6章 redis資料庫緩存技術1.redis熱點:2.1 NOSQL:Not Only SQL2.2 高性能、持久存儲、高並發 10萬次/s2.3 基於鍵值對類型 1G2.4內存資料庫>2.5異步操作Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存、可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。
  • redis的面試必備知識點
    1.面試官:redis有哪些數據類型和數據結構:2.面試官:可以聊一下redis的分布式鎖嗎?3.面試官:keys指令能說一下嗎?4.面試官:知道Redis的隊列嗎?可以說明幾個嗎?6.面試官:可以說說Redis的持久化機制嗎?7.面試官:可以聊一下如果機器斷電了會對redis造成什麼影響嗎?8.面試官:可以說一下你了解的redis的集群嗎?9.面試官:說一下持久化中RDB和AOF各自的優缺點吧。10.面試官:說一下redis的內存淘汰機制和與memcache的區別吧。
  • 面試官:你簡歷上寫著有分布式開發經驗,怎麼對緩存雪崩不了解?
    對於緩存,張工平時只是簡單知道怎麼使用而已,並沒有深入研究,對於分布式開發,也只是了解個大概,張工一時間沒有回答上來,面試官:我看你簡歷寫著有分布式開發經驗,怎麼連緩存雪崩都沒有了解啊。被面試官這麼一說,張工有點不好意思了。
  • 面試高頻問題,Redis的緩存穿透、擊穿、雪崩
    說到redis的緩存穿透、擊穿、雪崩這幾個問題不僅是面試的高頻問題,而且在我們實際應用上也是經常需要考慮的問題。那下面我們就來聊聊這個話題,以及一些解決措施。緩存穿透一般我們使用redis的模式,都是先去緩存查詢,如果緩存查詢不到才去持久層資料庫中查詢 ;假如某一個不存在的key被高頻訪問,去緩存中肯定查詢不到,於是此時大量訪問被請求到了持久層數據,持久層資料庫也查不到,那這些大量的請求就持續不停的訪問持久層資料庫,如果此時持久層資料庫扛不住有可能系統就出現故障了。
  • Redis面試題
    3、單線程的redis為什麼這麼快 分析:這個問題其實是對redis內部機制的一個考察。其實根據博主的面試經驗,很多人其實都不知道redis是單線程工作模型。所以,這個問題還是應該要複習一下的。需要說明的是,這個I/O多路復用機制,redis還提供了select、epoll、evport、kqueue等多路復用函數庫,大家可以自行去了解。
  • 緩存架構技術:Redis+MongDB,阿里P7面試必跳的坑
    前幾日有個小老弟找我哭訴,擠破腦袋進Alibaba,三輪技術下來倒在了緩存技術(Redis+MongDB)上。聽完我這小老弟的一番肺腑之言,這...緩存架構技術:Redis+MongDB,不就是阿里P7面試必跳的坑?
  • 最新Java崗面試清單:分布式+Dubbo+線程+Redis+資料庫+JVM+並發
    最近可能有點閒的慌,沒事就去找面試面經,整理了一波面試題。我大概是分成了java基礎、中級、高級,分布式,Spring架構,多線程,網絡,MySQL,Redis緩存,JVM相關,調優,設計模式,算法與數據結構,並發,Linux等15個小模塊。
  • 必問Redis面試題—媽媽再也不用擔心我面試被問Redis了
    Redis 作為一個開源的,高級的鍵值存儲和一個適用的解決方案,已經越來越在構建 「高性能」、「可擴展」 的 Web 應用上發揮著舉足輕重的作用。下面我們一起來盤點回顧一下 Redis 的面試經典問題,就不要再被面試官問得臉都綠了!
  • Java面試清單最全:基礎-分布式-Spring-資料庫-並發-緩存-高級
    小編最近花了一個星期的時間去整理了咱Java崗招聘必備的面試知識點(並給出本人認為比較合理的解析),從基礎-分布式-Spring-資料庫-線程-網絡-JVM-Tomcat-並發-緩存-算法與數據結構-並發-中級-高級等等,每一個都有篩選出很多知識點,大家其實也可根據各知識點在沒有答案的情況下測試自己會是不會,有沒有理解。
  • 幫你解讀什麼是Redis緩存穿透和緩存雪崩(包括解決方案)
    作為一個內存資料庫,redis也總是免不了有各種各樣的問題,這篇文章主要是針對其中兩個問題進行講解:緩存穿透和緩存雪崩。並給出一些解決方案。這兩個問題是基本問題也是面試常問問題。這篇文章我參考了很多篇,發現寫的基本上一樣,所以在此基礎之上進行改進。內容是我在某字母網站看的尚矽谷的教程總結的。特在此說明。
  • 面試官:緩存穿透、緩存雪崩和緩存擊穿是什麼?
    、緩存雪崩和緩存擊穿常常出現在面試中,今天來看看它到底是啥吧?在這裡,就是redis緩存集體大規模集體失效,在高並發情況下突然使得key大規模訪問mysql,使得資料庫崩掉去使得資料庫崩掉。這個key在緩存失效期間大量請求資料庫,對資料庫造成太大壓力使得資料庫崩掉。
  • Spring AOP 用註解封裝 redis 緩存
    前言面試時問到用沒用過 AOP,很多回答都是用 AOP 做過日誌統一處理。[what],給人感覺就是沒做過啊今天介紹一個用註解封裝 redis 緩存的 AOP 實戰redis 緩存加速的基本邏輯用 redis 加速資料庫訪問,一般會寫出如下代碼@Servicepublic class UserServiceImpl implements UserService
  • 有哪幾種實現資料庫緩存最終一致性的方案?
    ,資料庫緩存更是在項目中必然會遇到的場景。而緩存一致性的保證,更是在面試中被反覆問到,這裡進行一下總結,針對不同的要求,選擇恰到好處的一致性方案。緩存是什麼存儲的速度是有區別的。緩存就是把低速存儲的結果,臨時保存在高速存儲的技術。
  • Redis的那些最常見面試問題
    Java識堂,一個高原創,高收藏,有乾貨的微信公眾號,一起成長,一起進步,歡迎關注隨筆:經過長達一周的奔波和面試,電話面試,回首今天終於成功的入職了,總共面試了大概10家公司,包括阿里,京東,IBM等等,京東技術過了,學歷因為非統招就被pass了,阿里面了2次電話面試就沒下文了,估計是我當時最後提問題的時候減分了吧,其他的也有一些offer,不是不想去,就是了無音訊了
  • 搞懂這些Redis知識點,吊打面試官!
    Redis 是什麼面試官:你先來說下 Redis 是什麼吧!我:(這不就是總結下 Redis 的定義和特點嘛)Redis 是 C 語言開發的一個開源的(遵從 BSD 協議)高性能鍵值對(key-value)的內存資料庫,可以用作資料庫、緩存、消息中間件等。它是一種 NoSQL(not-only sql,泛指非關係型資料庫)的資料庫。
  • 如何解決Redis的緩存穿透、緩存雪崩和緩存擊穿
    添加到redis緩存if (!;5、如果從資料庫查詢出的數據不為空,則放入緩存(設定過期時間10分鐘)想像一下這個情況,如果傳入的參數為-1,會是怎麼樣?這個-1,就是不存在的數據,就會每次都去查詢資料庫,而每次查詢都是空,每次又都不會進行緩存。假如有惡意攻擊,就可以利用這個漏洞,對資料庫造成壓力,甚至壓垮資料庫。那麼,如何解決上述出現的問題呢?如果從資料庫查詢的數據為空,我們也把它放入緩存,只是設定的緩存過期時間較短,比如設置為60秒。
  • 我和面試官的博弈:Redis 篇
    Redis是什麼面試官:你先來說下redis是什麼吧我:(這不就是總結下redis的定義和特點嘛)Redis是C語言開發的一個開源的(遵從BSD協議)高性能鍵值對(key-value)的內存資料庫,可以用作資料庫、緩存、消息中間件等。
  • 這些redis很基礎,卻難倒無數英雄,若不是這次面試我還不信
    :優點:高性能讀寫、單一數據類型、支持客戶端式分布式集群、一致性hash多核結構、多線程讀寫性能高。缺點:無持久化、節點故障可能出現緩存穿透、分布式需要客戶端實現、跨機房數據同步困難、架構擴容複雜度高Redis: 優點:高性能讀寫、多數據類型支持、數據持久化、高可用架構、支持自定義虛擬內存、支持分布式分片集群、單線程讀寫性能極高缺點:多線程讀寫較Memcached慢新浪、京東、直播類平臺、網頁遊戲memcache 與redis在讀寫性能的對比memcached 適合,多用戶訪問,每個用戶少量的rwredis
  • 因為一次redis緩存穿透,全面探究redis能做什麼
    問題背景:網關支付,支付之前需要根據商戶去獲取支持的銀行列表,銀行列表是商家首次在我們系統裡申請開戶的時候配置進去的,第一次獲取列表是通過調遠程接口查詢資料庫獲取的,獲取成功後,結果保存在redis緩存中,有效期設置6小時,以後每次查詢都直接訪問redis緩存即可。