日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis 基本数据类型 :String、Hash、List、Set、ZSet

發布時間:2024/4/11 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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值進行查找,并不支持范圍查詢。
    所以將兩者進行結合,使用字典建立起元素與分值的映射,使用字典來進行成員分數的查找,而使用跳躍表來進行范圍型操作,這樣就很好的解決了這個問題。
typedef struct zset {zskiplist *zsl;dict *dict; } zset;


基本用法

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。