當前位置: 妍妍網 > 碼農

面試都喜歡問 Redis,為什麽?因為他快嗎?

2024-07-02碼農

點選「 IT碼徒 」, 關註,置頂 公眾號

每日技術幹貨,第一時間送達!

1

Redis 為什麽成為企業的選擇?

要知道 Redis 的作用我們要先知道它的誕生是用來解決的什麽問題

1.Redis的誕生

隨著互聯網技術的飛速發展,雲端運算、雲原生和大數據等概念一直不斷地回繞在我們耳邊,但相比話都說膩了的口號,我們更清楚的是我們的互聯網套用變快了,變復雜了,變得所需的資源、效能、操作模式舊的關系型資料庫已經不能很好的滿足需求了。

這導致在當今這個互聯網飛速發展的時代,所有企業對套用的效能提出了更高的要求:

  • 低延遲 :復雜的套用會極大的占用資源,但玩法的增多必然導致套用的復雜,那麽套用快速地反應能極大地提升使用者的滿意度。

  • 大數據 :對於搜尋、秒殺等等這樣大型套用或活動而言,需要利用PB級別的數據和能應對百萬級的流量,傳統的關系型資料庫很難支持如此龐大流量的快速查詢。

  • 分布式 :系統管理員希望分布式套用能更簡單的部署和管理,分布式部署能帶來效能和效率上的提升,當某個資源在多系統之間,具有共享性的時候,為了保證資源數據是一致的,我們需要控制多客戶端能互斥的對共享資源進行存取。

  • 低成本 :企業希望在硬體成本、軟體成本和人力成本能夠大振幅地降低,且之後的可延伸性強。

  • 為了克服這些問題,NoSQL應運而生,它同時具備了高效能、可延伸性強、高可用等優點,受到廣泛開發人員和倉庫管理人員的青睞。

    2.Redis是什麽?

    Redis 是完全開源的,遵守 BSD 協定,是一個高效能的 key-value 資料庫。Redis也是現在最受歡迎的NoSQL資料庫之一,Redis是一個使用ANSI C編寫的開源、包含多種數據結構、支持網路、基於記憶體、可選永續性的鍵值對儲存資料庫。

    Redis 與其他 key - value 緩存產品有以下三個特點:

  • Redis支持數據的持久化,可以將記憶體中的數據保存在磁盤中,重新開機的時候可以再次載入進行使用。

  • Redis不僅僅支持簡單的key-value型別的數據,同時還提供list,set,zset,hash等數據結構的儲存。

  • Redis支持數據的備份,即master-slave模式的數據備份。

  • 3.企業看重Redis什麽?

    Redis的優勢

  • 效能極高:Redis能讀的速度是110000次/s,寫的速度是81000次/s,可能滿足企業低延遲的需求 。

  • 豐富的數據型別:Redis支持二進制案例的 Strings, Lists,Hashes,Sets 及 Ordered Sets 數據型別操作。

  • 原子:Redis的所有操作都是原子性的,同時Redis還支持對幾個操作合並後的原子性執行,也就是說支持事務。

  • 豐富的特性:Redis還支持 publish/subscribe,通知,key 過期等等特性。

  • 不只有 Redis 一個產品,那麽和其他產品不同在哪

    ★ Redis與其他key-value儲存有什麽不同?

  • Redis有著更為復雜的數據結構並且提供對他們的原子性操作,這是一個不同於其他資料庫的前進演化路徑。Redis的數據型別都是基於基本數據結構的同時對程式設計師透明,無需進行額外的抽象。

  • Redis執行在記憶體中但是可以持久化到磁盤,所以在對不同數據集進行高速讀寫時需要權衡記憶體,因為數據量不能大於硬體記憶體。

  • 相比在磁盤上相同的復雜的數據結構,在記憶體中操作起來非常簡單,這樣Redis可以做很多內部復雜性很強的事情。

  • 在磁盤格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機存取。

  • 2

    為什麽面試喜歡問Redis?

    1. 為什麽?

    主要是因為工作後會發現到處都需要,使用場景廣泛

    作為目前主流的NoSQL技術,redis在多數程式語言中都得到了非常廣泛的使用,如果連Redis都沒用過,面試容易啞口無言很尷尬。

    2. 常見面試題型

    ★ 什麽是redis?

    Redis 是一個基於記憶體的高效能key-value資料庫。

    ★ Reids的特點?

  • Redis本質上是一個Key-Value型別的記憶體資料庫,整個資料庫統統載入在記憶體當中進行操作,定期透過異步操作把資料庫數據flush到硬碟上進行保存。

  • 因為是純記憶體操作,Redis的效能非常出色,每秒可以處理超過 10萬次讀寫操作,是已知效能最快的Key-Value DB。

  • Redis的資料庫容量受到實體記憶體的限制,不能用作海量數據的高效能讀寫。

  • Redis支持保存多種數據結構,此外單個value的最大限制是1GB,另外Redis也可以對存入的Key-Value設定過期時間.

  • ★ 使用redis有哪些好處?

    簡單來說就是

    1:速度快

    2:數據型別多

    3:支持事務

    4 :特性多

    2.使用場景

    ★ 常見場景

    1、緩存:毫無疑問這是Redis的主要場景,可以大幅伺服器效能,減少人力成本、伺服器成本。

    2、排行榜:傳統的關系型資料庫來做排行榜,每次更新排名,就非常的麻煩,而利用Redis的有序集合數據結構卻能夠簡單的搞定。

    3、小算盤/限速器,利用Redis中原子性的自增操作,我們可以統計類似使用者點贊數、存取數等等,而限速器比較典型的使用場景是限制使用者存取頻率來降低秒殺活動時的伺服器請求壓力。

    ★ 其他場景

    1、好友關系,利用集合的一些命令,比如求交集、聯集、差集等。可以方便搞定一些共同好友、共同愛好之類的功能。

    2、簡單訊息佇列,一些不需要高可靠的通知需求,但是大量數據會帶來極大的DB壓力,完全可以用List來完成異步解耦。

    3、一些頻繁被存取的數據,放在redis中,利用redis 是放在記憶體中的特性可以很高效的進行存取。

    3

    它為什麽快?

    透過前面的理解,我們發現它的高效存取確實是企業與個人選擇它的主要理由,但是他依然有其他特別優秀的方面與使用場景

    1.為什麽快?

    Redis 是基於記憶體的操作,CPU 不是 Redis 的瓶頸,Redis的瓶頸最有可能是機器的記憶體的大小和網路的頻寬,而且單執行緒的效能已經非常高了,就沒有必要使用多執行緒了,所以 Redis 是單行程單執行緒的。

    提示:

  • 如果我們執行的伺服器是多核伺服器,為了充分利用多核優勢我們可以在單台伺服器起多個 Redis 服務,或者架設主從復制、哨兵模式、集群模式等多機方案。

  • Redis 服務執行時只是處理客戶端請求是單行程單執行緒的,但是服務執行時會有其他行程或執行緒處理其他的事,比如RDB的檔的生成就會在子行程中進行等。

  • 2.為什麽這麽快?

  • 完全基於記憶體,絕大部份請求是基於記憶體的操作,而 Redis 的數據結構是類似於HashMap,而 HashMap

  • 的操作時間復雜度是O(1)

  • Redis 數據結構設計簡單,方便操作

  • 使用單執行緒,避免了行程或執行緒的上下文切換相關的消耗,不用考慮鎖相關問題消耗。

  • 使用多路I/O復用模型,非阻塞IO

  • 使用底層模型不同,底層實作方式以及與客戶端之間通訊的套用協定不一樣,Redis直接自己構建了VM 機制 ,因為一般的系統呼叫系統函式的話,會浪費一定的時間去移動和請求

  • 相信看到這裏你也明白了,Redis 為什麽這麽快,就是 Redis 這個資料庫最大的優勢

    4

    總結

    透過了解 Redis 為什麽這麽快,相信我們已經很熟悉 Redis 的作用了,那麽我們 Redis 的學習才剛剛開始,使用、精通、鉆研將是我們不斷的話題。

    Redis 之路才剛剛開始。

    來源:blog.csdn.net/moer0/article/details/122972132

    END

    PS:防止找不到本篇文章,可以收藏點贊,方便翻閱尋找哦。

    往期推薦