我們為什麼要用redis

2022-05-05 15:39:10 字數 2057 閱讀 2633

1、為什麼要選擇redis:介紹redis的使用場景與使用redis的原因;

2、redis常用命令總結:包括時間複雜度總結與具體資料型別在redis內部使用的資料結構;

3、redis的高階功能:包括持久化、複製、哨兵、集群介紹;

4、理解redis:理解記憶體、阻塞,這部分是非常重要的,前面介紹的都可以成為術,這裡應該屬於道的部分;

5、開發技巧:主要是一些開發實戰的總結,包括快取設計與常見坑點。

先來開啟第一部分的內容,對redis來一次重新打量。

在面試的時候,常被問比較下redis與memcache的優缺點,個人覺得這二者並不適合一起比較,乙個是非關係型資料庫不僅可以做快取還能幹其他事情,乙個是僅用做快取。常常讓我們對這二者進行比較,主要也是由於redis最廣泛的應用場景就是cache,那麼redis到底能幹什麼?又不能幹什麼呢?

快取,毫無疑問這是redis當今最為人熟知的使用場景,再提公升伺服器效能方面非常有效。

1.排行榜,如果使用傳統的關係型資料庫來做,非常麻煩,而利用redis的sortset資料結構能夠非常方便搞定;

2.計算器/限速器,利用redis中原子性的自增操作,我們可以統計類似使用者點讚數、使用者訪問數等,這類操作如果用mysql,頻繁的讀寫會帶來相當大的壓力;限速器比較典型的使用場景是限制某個使用者訪問某個api的頻率,常用的有搶購時,防止使用者瘋狂點選帶來不必要的壓力;

3.好友關係,利用集合的一些命令,比如求交集、並集、差集等,可以方便搞定一些共同好友、共同愛好之類的功能;

4.簡單訊息佇列,除了redis自身的發布/訂閱模式,我們也可以利用list來實現乙個佇列機制,比如到貨通知、郵件傳送之類的需求,不需要高可靠,但是會帶來非常大的db壓力,完全可以用list來完成非同步解耦;

5.session共享,以php為例,預設session是儲存在伺服器的檔案中,如果是集群服務,同乙個使用者過來可能落在不同機器上,這就會導致使用者頻繁登陸;採用redis儲存session後,無論使用者落在那台機器上都能夠獲取到對應的session資訊。

redis感覺能幹的事情特別多,但它不是萬能的,合適的地方用它事半功倍,如果濫用可能導致系統的不穩定、成本增高等問題。

1.比如,用redis去儲存使用者的基本資訊,雖然它能夠支援持久化,但是它的持久化方案並不能保證資料絕對的落地,並且還可能帶來redis效能下降,因為持久化太過頻繁會增大redis服務的壓力。

2.簡單總結就是資料量太大、資料訪問頻率非常低的業務都不適合使用redis,資料太大會增加成本,訪問頻率太低,儲存在記憶體中純屬浪費資源。

上面說了redis的一些使用場景,那麼這些場景的解決方案也有很多其它選擇,比如快取可以用memcache,session共享還能用mysql來實現,訊息佇列可以用rabbitmq,我們為什麼一定要用redis呢?

速度快,完全基於記憶體,使用c語言實現,網路層使用epoll解決高併發問題,單執行緒模型避免了不必要的上下文切換及競爭條件;

注意:單執行緒僅僅是說在網路請求這一模組上用乙個請求處理客戶端的請求,像持久化它就會重開乙個執行緒/程序去進行處理。

豐富的資料型別,redis有8種資料型別,當然常用的主要是 string、hash、list、set、 sortset 這5種型別,他們都是基於鍵值的方式組織資料。每一種資料型別提供了非常豐富的操作命令,可以滿足絕大部分需求,如果有特殊需求還能自己通過 lua 指令碼自己建立新的命令(具備原子性);

除了提供的豐富的資料型別,redis還提供了像慢查詢分析、效能測試、pipeline、事務、lua自定義命令、bitmaps、hyperloglog、發布/訂閱、geo等個性化功能。

redis的**開源在github,**非常簡單優雅,任何人都能夠吃透它的原始碼;它的編譯安裝也是非常的簡單,沒有任何的系統依賴;有非常活躍的社群,各種客戶端的語言支援也是非常完善。另外它還支援事務(沒用過)、持久化、主從複製讓高可用、分布式成為可能。

做為乙個開發者,對於我們使用的東西不能讓它成為乙個黑盒子,我們應該深入進去,對它更了解、更熟悉,今天簡單說了下redis的使用場景,以及為什麼選擇了redis而不是其他。

我們為什麼要用框架。

先說下我熟悉的兩個框架的作用 1,struts,它也就是提供了控制層,用它的話,我們只管寫頁面和模型,而不需要去考慮 乙個請求發出後,是怎麼到達乙個action,然後action又是怎麼呼叫模型的方法,又是怎麼把請求 到別的頁面。這一系列控制層的工作,我們都不需要考慮了,因為struts已經替我們做...

為什麼我們要用Spring Boot?

為什麼我們要用 spring boot,spring boot 最重要的功能是 自動配置。為什麼說是自動配置?configuration componentscan enableautoconfiguration 上面三個註解,前面兩個都是 spring 自帶的,和 spring boot 無關,所...

為什麼我們基本選擇redis

例如熱搜榜 訂單表等aof和rdb 優點 redis掛了再次重啟,記憶體裡能夠快速恢復熱資料 缺點 在redis掛了的過程中,資料庫中資料修改,會導致資料庫和redis不一致redis已經有現成的,而memcache需要進行二次開發memcache的值儲存最大為1m,如果儲存值較大情況下,建議使用r...