簡單了解過Redis的小伙伴應該都知道Redis常被當做快取,那為什么要選這個nosql型的資料庫來當快取小伙伴們有考慮過這個問題嗎?
兩個角度考慮,性能,并發,
性能
我們的Mysql中存放的資料是存放在磁盤上的,在對資料進行讀取的時候會先把資料從磁盤讀到記憶體中去,然后再對資料做一個處理,那我們知道磁盤的IO速度是遠遠小于cpu處理資料的速度的,而redis的資料是存在記憶體中的,所以我們訪問redis中的資料相當于是直接基于記憶體操作,所以很快,那redis基于記憶體操作的話,萬一斷電了怎么辦,這么簡單的問題,咱們都想到了,設計redis的人會想不到嗎,redis有兩種持久化資料的方式,一種是RDB,一種是AOF,這里我就不過多的做拓展了,
并發
高并發:直接操作快取能夠承受的請求是遠遠大于直接訪問資料庫的,所以我們可以考慮把資料庫中的部分資料轉移到快取中去,這樣用戶的一部分請求會直接到快取這里而不用經過資料庫,
為什么要用 redis 而不用 map/guava 做快取?
快取分為本地快取和分布式快取,以 Java 為例,使用自帶的 map 或者 guava 實作的是本地快取,最主要的特點是輕量以及快速,生命周期隨著 JVM的銷毀而結束,并且在多實體的情況下,每個實體都需要各自保存一份快取,快取不具有一致性,
使用 redis 或 memcached 之類的稱為分布式快取,在多實體的情況下,各實體共用一份快取資料,快取具有一致性,缺點是需要保持 redis 或 memcached服務的高可用,整個程式架構上較為復雜,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/277005.html
標籤:其他
上一篇:位元組跳動面試官問我什么是Zookeeper、Zookeeper的應用場景、服務呼叫、資料模型與節點分類,我整理了下!
下一篇:grpc的封裝
