Redis 基本数据类型 :String、Hash、List、Set、ZSet
生活随笔
收集整理的這篇文章主要介紹了
Redis 基本数据类型 :String、Hash、List、Set、ZSet
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 字符串類型
- 基本用法
- 使用場景
- 哈希類型
- 基本用法
- 使用場景
- 列表類型
- 基本用法
- 使用場景
- 集合類型
- 基本用法
- 使用場景
- 有序集合類型
- 基本用法
- 使用場景
字符串類型
字符串類型(SDS)即簡單動態字符串,它是以鍵值對key-value的形式進行存儲的,根據 key 來存儲和獲取value值
依據不同情況,字符串在底層會使用 int 、 raw 或者 embstr 三種不同的編碼格式
- 如果數據為可以使用long類型來保存的整數,則使用int
- 如果數據為可以使用long double類型來保存的浮點數,則使用embstr或者raw
- 如果數據為字符串,或者長度過大沒辦法用long來表示的整數,以及長度過大無法用long double表示的浮點數,則使用embstr或者raw。當數據小于39字節時,使用embstr,當大于39字節時使用raw
基本用法
127.0.0.1:6379> set hello world //設置key-value OK 127.0.0.1:6379> get hello //根據key獲取value "world" 127.0.0.1:6379> strlen hello //計算value長度 (integer) 5使用場景
- 存放用戶(登錄)信息;
- 存放文章詳情和列表信息;
- 存放和累計網頁的統計信息。
哈希類型
字典類型 (Hash) 又被成為散列類型或者是哈希表類型,它是將?個鍵值 (key) 和?個特殊的“哈希表”關聯起來。
哈希類型的底層數據結構可以是壓縮列表(ZipList)或者字典(Dict)
- 當哈希對象的所有鍵值對的鍵和值的字符串長度都小于64字節,并且保存的鍵值對數量小于512個時,使用壓縮列表
- 如果不滿足上述條件中的任意一個,都會使用字典
基本用法
127.0.0.1:6379> hset hash1 name lee age 20 //設置key-value的映射 (integer) 2 127.0.0.1:6379> hget hash1 name //獲取key為name的value "lee" 127.0.0.1:6379> hget hash1 age //獲取key為age的value "20"使用場景
- 存儲用戶信息或者某個物品的信息,無需序列化,直接建立映射
列表類型
列表類型 (List) 是?個使用線性結構存儲的結構,它的元素插入會按照先后順序存儲到鏈表結構中。
列表類型的底層數據結構可以是壓縮列表(ZipList)或者鏈表(LinkedList)
- 當列表對象的所有字符串元素長度都小于64字節,并且保存的元素數量小于512個時,使用壓縮列表
- 如果不滿足上述條件中的任意一個,都會使用鏈表
基本用法
127.0.0.1:6379> lpush list1 1 2 3 4 5 //依次頭插1 2 3 4 5,此時數據為5 4 3 2 1 (integer) 5 127.0.0.1:6379> rpop list1 //尾刪 "1" 127.0.0.1:6379> lpop list1 //頭刪 "5"使用場景
- 消息隊列:列表類型可以使用 rpush 實現先進先出的功能,同時又可以使用 lpop 輕松的彈出(查詢并刪除)第?個元素,所以列表類型可以用來實現消息隊列;
- 文章列表:對于博客站點來說,當用戶和文章都越來越多時,為了加快程序的響應速度,我們可以把用戶自己的文章存入到 List 中,因為 List 是有序的結構,所以這樣不僅可以完美的實現分頁功能,而且加速了程序的響應速度。
集合類型
集合類型 (Set) 是?個無序并唯?的鍵值集合。
集合類型的底層數據結構可以是整數集合(IntSet)或者字典(Dict)
- 當集合對象的所有元素都是整數值,并且保存的元素數量小于512個時,使用整數集合
- 如果不滿足上述條件中的任意一個,都會使用字典
基本用法
127.0.0.1:6379> sadd testSet v1 v2 v3 v4 v2 v4 v1 (integer) 4 127.0.0.1:6379> smembers testSet //去重且無序 1) "v2" 2) "v1" 3) "v4" 4) "v3"使用場景
- 微博關注我的人和我關注的人都適合用集合存儲,可以保證人員不會重復;
- 中獎人信息也適合用集合類型存儲,這樣可以保證?個人不會重復中獎。
有序集合類型
有序集合類型 (SortedSet) 相比于集合類型多了?個排序屬性 score(分值),所以對于有序集合ZSet 來說,每個存儲元素相當于有兩個值組成的,?個是有序結合的元素值,?個是分值。有序集合的存儲元素值也是不能重復的,但分值是可以重復的。
有序集合類型的底層數據結構可以是壓縮列表(ZipList)或者跳表(SkipList )
- 當有序集合對象的所有元素成員的長度都小于64字節,并且保存的元素數量小于128個時,使用壓縮列表
- 如果不滿足上述條件中的任意一個,都會使用跳表(這里的跳表是結合字典的)
這里不是直接使用跳表,而是搭配字典一起使用
之所以這樣設置是因為考慮到如果直接使用跳躍表,如果需要查找成員的分值時只能通過遍歷來進行查找,而這樣的效率是O(logN)
而字典雖然建立映射后可以O(1)的查找到分值,但是哈希只能通過key值進行查找,并不支持范圍查詢。
所以將兩者進行結合,使用字典建立起元素與分值的映射,使用字典來進行成員分數的查找,而使用跳躍表來進行范圍型操作,這樣就很好的解決了這個問題。
基本用法
127.0.0.1:6379> zadd zset1 3 v1 8 v2 2 v3 6 v4 #插入時以分值-值的形式插入 (integer) 4 127.0.0.1:6379> zrange zset1 0 -1 #查找結果按照升序排序 1) "v3" 2) "v1" 3) "v4" 4) "v2"使用場景
- 學生成績排名;
- 粉絲列表,根據關注的先后時間排序。
總結
以上是生活随笔為你收集整理的Redis 基本数据类型 :String、Hash、List、Set、ZSet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是缓存?为什么要使用Redis?
- 下一篇: Redis 持久化策略 : RDB持久化