推薦閱讀:https://blog.csdn.net/m0_46995061/article/details/106148048
https://blog.csdn.net/m0_46995061/article/details/106124211
分享是奉獻的果實。分享是快樂的前提。 分享是一種博愛的心境,學會分享,就學會了生活。 我是Coid也是Codi,歡迎各位關注我,技術宅男的快樂其實也很簡單!
redis 簡介
簡單來說 redis 就是一個數據庫,不過與傳統數據庫不同的是 redis 的數據是存在內存中的,所以存寫速度非常快,
因此 redis 被廣泛應用於緩存方向。另外,redis 也經常用來做分佈式鎖。redis 提供了多種數據類型來支持不同的業
務場景。除此之外,redis 支持事務 、持久化、LUA腳本、LRU驅動事件、多種集羣方案。
爲什麼要用 redis /爲什麼要用緩存
主要從“高性能”和“高併發”這兩點來看待這個問題。
高性能:
假如用戶第一次訪問數據庫中的某些數據。這個過程會比較慢,因爲是從硬盤上讀取的。將該用戶訪問的數據存在數
緩存中,這樣下一次再訪問這些數據的時候就可以直接從緩存中獲取了。操作緩存就是直接操作內存,所以速度相當
快。如果數據庫中的對應數據改變的之後,同步改變緩存中相應的數據即可!
高併發:
直接操作緩存能夠承受的請求是遠遠大於直接訪問數據庫的,所以我們可以考慮把數據庫中的部分數據轉移到緩存中
去,這樣用戶的一部分請求會直接到緩存這裏而不用經過數據庫。
爲什麼要用 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 複用模型。
來自網絡上的一張圖,這裏分享給大家!
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 知識點BAT面試集結
現在免費送給各位,有需要的朋友可以按照如下方式免費領取!
資料領取方式:關注+轉發+收藏後私信【資料】即可免費獲取!