從 redis 簡介到Redis BAT面試集結,看阿里P7架構師如何從容應對

推薦閱讀:https://blog.csdn.net/m0_46995061/article/details/106148048

https://blog.csdn.net/m0_46995061/article/details/106124211

分享是奉獻的果實。分享是快樂的前提。 分享是一種博愛的心境,學會分享,就學會了生活。 我是Coid也是Codi,歡迎各位關注我,技術宅男的快樂其實也很簡單!

從 redis 簡介到Redis BAT面試集結,看阿里P7架構師如何從容應對

 

redis 簡介

簡單來說 redis 就是一個數據庫,不過與傳統數據庫不同的是 redis 的數據是存在內存中的,所以存寫速度非常快,

因此 redis 被廣泛應用於緩存方向。另外,redis 也經常用來做分佈式鎖。redis 提供了多種數據類型來支持不同的業

務場景。除此之外,redis 支持事務 、持久化、LUA腳本、LRU驅動事件、多種集羣方案。

爲什麼要用 redis /爲什麼要用緩存

主要從“高性能”和“高併發”這兩點來看待這個問題。

高性能:

假如用戶第一次訪問數據庫中的某些數據。這個過程會比較慢,因爲是從硬盤上讀取的。將該用戶訪問的數據存在數

緩存中,這樣下一次再訪問這些數據的時候就可以直接從緩存中獲取了。操作緩存就是直接操作內存,所以速度相當

快。如果數據庫中的對應數據改變的之後,同步改變緩存中相應的數據即可!

從 redis 簡介到Redis BAT面試集結,看阿里P7架構師如何從容應對

 

高併發:

直接操作緩存能夠承受的請求是遠遠大於直接訪問數據庫的,所以我們可以考慮把數據庫中的部分數據轉移到緩存中

去,這樣用戶的一部分請求會直接到緩存這裏而不用經過數據庫。

從 redis 簡介到Redis BAT面試集結,看阿里P7架構師如何從容應對

 

爲什麼要用 redis 而不用 map/guava 做緩存?

緩存分爲本地緩存和分佈式緩存。以 Java 爲例,使用自帶的 map 或者 guava 實現的是本地緩存,最主要的特點是

輕量以及快速,生命週期隨着 jvm 的銷燬而結束,並且在多實例的情況下,每個實例都需要各自保存一份緩存,緩

存不具有一致性。

使用 redis 或 memcached 之類的稱爲分佈式緩存,在多實例的情況下,各實例共用一份緩存數據,緩存具有一致

性。缺點是需要保持 redis 或 memcached服務的高可用,整個程序架構上較爲複雜。

6.4 redis 和 memcached 的區別

對於 redis 和 memcached 我總結了下面四點。現在公司一般都是用 redis 來實現緩存,而且 redis 自身也越來越強

大了!

1. redis支持更豐富的數據類型(支持更復雜的應用場景):Redis不僅僅支持簡單的k/v類型的數據,同時還提供

list,set,zset,hash等數據結構的存儲。memcache支持簡單的數據類型,String。

2. Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啓的時候可以再次加載進行使用,而

Memecache把數據全部存在內存之中。

3. 集羣模式:memcached沒有原生的集羣模式,需要依靠客戶端來實現往集羣中分片寫入數據;但是 redis 目前

是原生支持 cluster 模式的.

4. Memcached是多線程,非阻塞IO複用的網絡模型;Redis使用單線程的多路 IO 複用模型。

來自網絡上的一張圖,這裏分享給大家!

從 redis 簡介到Redis BAT面試集結,看阿里P7架構師如何從容應對

 

1. String

常用命令: set,get,decr,incr,mget 等。

String數據結構是簡單的key-value類型,value其實不僅可以是String,也可以是數字。 常規key-value緩存應用;

常規計數:微博數,粉絲數等。

2.Hash

常用命令: hget,hset,hgetall 等。

Hash 是一個 string 類型的 fifield 和 value 的映射表,hash 特別適合用於存儲對象,後續操作的時候,你可以直接僅

僅修改這個對象中的某個字段的值。 比如我們可以Hash數據結構來存儲用戶信息,商品信息等等。比如下面我就用

hash 類型存放了我本人的一些信息:

3.List

常用命令: lpush,rpush,lpop,rpop,lrange等

key=JavaUser293847 
value={ 
“id”: 1, 
“name”: “SnailClimb”, 
“age”: 22, 
“location”: “Wuhan, Hubei” 

}list 就是鏈表,Redis list 的應用場景非常多,也是Redis最重要的數據結構之一,比如微博的關注列表,粉絲列表,

消息列表等功能都可以用Redis的 list 結構來實現。

Redis list 的實現爲一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內存開銷。

另外可以通過 lrange 命令,就是從某個元素開始讀取多少個元素,可以基於 list 實現分頁查詢,這個很棒的一個功

能,基於 redis 實現簡單的高性能分頁,可以做類似微博那種下拉不斷分頁的東西(一頁一頁的往下走),性能高。

4.Set

常用命令: sadd,spop,smembers,sunion 等

set 對外提供的功能與list類似是一個列表的功能,特殊之處在於 set 是可以自動排重的。

當你需要存儲一個列表數據,又不希望出現重複數據時,set是一個很好的選擇,並且set提供了判斷某個成員是否在

一個set集合內的重要接口,這個也是list所不能提供的。可以基於 set 輕易實現交集、並集、差集的操作。

比如:在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。Redis可以非常

方便的實現如共同關注、共同粉絲、共同喜好等功能。這個過程也就是求交集的過程,具體命令如下:

5.Sorted Set

常用命令: zadd,zrange,zrem,zcard等

和set相比,sorted set增加了一個權重參數score,使得集合中的元素能夠按score進行有序排列。

舉例: 在直播系統中,實時排行信息包含直播間在線用戶列表,各種禮物排行榜,彈幕消息(可以理解爲按消息維

度的消息排行榜)等信息,適合使用 Redis 中的 SortedSet 結構進行存儲。

總結

限於頭條篇幅的原因, Redis知識點總結不能完全放出來,原本準備的 Redis知識點有很多,各位可以看下圖!

從 redis 簡介到Redis BAT面試集結,看阿里P7架構師如何從容應對

 

從 redis 簡介到Redis BAT面試集結,看阿里P7架構師如何從容應對

 

這個文檔已經整理的很詳細了!

我這邊還整理了關於 Redis 知識點BAT面試集結

從 redis 簡介到Redis BAT面試集結,看阿里P7架構師如何從容應對

 

現在免費送給各位,有需要的朋友可以按照如下方式免費領取!

資料領取方式:關注+轉發+收藏後私信【資料】即可免費獲取!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章