天天看點

redis五種資料結構一、string(字元串)二、list(清單)三、hash(字典)四、set(集合)五、zset(有序集合)六、總結一下五種類型的作用

說明:

  • 對于Redis來說,它可以存儲五種基本資料類型,
  • redis中所有資料結構都以唯一的key字元串作為名稱,然後通過這個唯一的key來擷取對應的value
  • 不同的資料類型資料結構差異就在于value的結構不一樣
  • 而現在的版本中的五種類型是:String(字元串)、Hash(字典)、List(清單)、Set(集合)、SortedSet(zSet:有序集合)

一、string(字元串)

  • 1)value的資料結構(數組)

  • 字元串是Redis中最常用的類型,是一個由位元組組成的序列,它在Redis中是二進制安全的,這便意味着該類型可以接受任何格式的資料,Value最多可以容納的資料長度為512MB。
  • 字元串value資料結構類似于數組,采用與配置設定記憶體空間來減少記憶體頻繁配置設定
  • 如果字元串長度操作1MB時,擴容時最多擴容1MB空間,字元串最大長度為 512MB
  • 2)字元串的使用場景(緩存)

    • 字元串一個常見的用途是緩存使用者資訊,我們将使用者資訊使用JSON序列化成字元串
    • 取使用者資訊時會經過一次反序列化的過程

注意:redis中的Key和Value是區分大小寫的,指令是不區分大小寫的, redis是單線程 不适合存儲大容量的資料。自增的value是可以轉成數字的。

基本操作:

set key value

往key中存入一個值(value)

get key

擷取鍵為key的值

二、list(清單)

  • 1)value的資料結構(雙向連結清單)

  • Redis的清單允許使用者從序列的兩端推入或者彈出元素,清單由多個字元串值組成的有序可重複的序列,擷取越接近兩端的元素速度就越快。這意味着即使是一個有幾千萬個元素的清單,擷取頭部或尾部的10條記錄也是極快的。List中可以包含的最大元素數量是4294967295(接近43億)。
    • 清單的資料結構是雙向連結清單,這意味着插入和删除的時間複雜度是0(1),索引的時間複雜度位0(n)
    • 當清單彈出最後一個元素後,該資料結構會被自動删除,記憶體被回收
  • 2)清單的使用場景(隊列、棧)

    • 應用場景:1.最新消息排行榜。2.消息隊列,以完成多程式之間的消息交換。可以用push操作将任務存在list中(生産者),然後線程在用pop操作将任務取出進行執行(消費者)。

基本操作:

redis五種資料結構一、string(字元串)二、list(清單)三、hash(字典)四、set(集合)五、zset(有序集合)六、總結一下五種類型的作用

三、hash(字典)

  • 1)value的資料結構(HashMap)

    • redis中的字典也是HashMap(數組+清單)的二維結構
    • 相當于是一個key中存在多個map。Redis中的散列可以看成具有String key和String value的map容器,可以将多個key-value存儲到一個key中。每一個Hash(字典)可以存儲4294967295(接近43億)個鍵值對。
    • 不同的是redis的字典的值隻能是字元串
  • 2)hash的使用場景(緩存)

    • hash結構也可以用來緩存使用者資訊,與字元串一次性全部序列化整個對象不同,hash可以對每個字段進行單獨存儲
    • 這樣可以部分擷取使用者資訊,節約網絡流量
    • hash的缺點是:hash結構的存儲消耗要高于單個字元串(消耗記憶體)

基本操作:

redis五種資料結構一、string(字元串)二、list(清單)三、hash(字典)四、set(集合)五、zset(有序集合)六、總結一下五種類型的作用
redis五種資料結構一、string(字元串)二、list(清單)三、hash(字典)四、set(集合)五、zset(有序集合)六、總結一下五種類型的作用

四、set(集合)

  • 1)value的資料結構(字典)

  • Redis的集合是無序且不可重複的,此處的無序是資料不能重複。和清單一樣,在執行插入和删除以及判斷是否存在某元素時,效率是很高的。集合最大的優勢在于可以進行交集并集差集操作。Set可包含的最大元素數量是4294967295(接近43億)。
    • redis中的集合相當于一個特殊的字典。
    • 當集合中的最後一個元素被移除後,資料結構會被自動删除,記憶體被回收
  • 2)set使用場景(有唯一性)

    • set結構可以用來存儲某個活動中中獎的使用者ID,因為有去重功能,可以保證同一使用者不會中獎兩次
    • 利用交集求共同好友。
    • 利用唯一性,可以統計通路網站的所有獨立IP。
    • 基本操作:
      redis五種資料結構一、string(字元串)二、list(清單)三、hash(字典)四、set(集合)五、zset(有序集合)六、總結一下五種類型的作用

五、zset(有序集合)

有順序,不能重複!!此處的不能重複是索引為唯一的,資料卻可以重複。

  • 1)value的資料結構(跳躍清單)

    • 它可以給每一個value賦予一個score,代表這個value的唯一
  • 和Set很像,都是字元串的集合,都不允許重複的成員出現在一個set中。他們之間差别在于有序集合中每一個成員都會有一個分數(score)與之關聯,Redis正是通過分數來為集合中的成員進行從小到大的排序。盡管有序集合中的成員必須是唯一的,但是分數(score)卻可以重複。
    • zset内部實作用的是一種叫做“跳躍清單”的資料結構
    • zset最後一個元素被移除後,資料結構就會被自動删除,記憶體也會被回收
  • 2)zset應用場景

  • 粉絲清單:value(粉絲ID),score(關注時間),這樣可以輕松按關注事件排序
    • 學生成績:value(學生ID),score(考試成績),這樣可以輕松對成績排序
    • 可以用于一個大型線上遊戲的積分排行榜,每當玩家的分數發生變化時,可以執行zadd更新玩家分數(score),此後在通過zrange擷取幾分top

      ten的使用者資訊。

基本操作:

zadd zset1 9 a 8 c 10 d 1 e (添加元素 zadd key score member )

(ZRANGE key start stop [WITHSCORES])(檢視所有元素:zrange key 0 -1

withscores)

如果要檢視分數,加上withscores.

zrange zset1 0 -1 (從小到大)

zrevrange zset1 0 -1 (從大到小)

zincrby zset2 score member (對元素member 增加 score)

1 127.0.0.1:6379> zadd zset1 8 a 4 b 5 c 1 d
 2 (integer) 4
 3 127.0.0.1:6379> zrange zset1 0 -1 
 4 1) "d"
 5 2) "b"
 6 3) "c"
 7 4) "a"
 8 127.0.0.1:6379> zadd zset1 9 a
 9 (integer) 0
10 127.0.0.1:6379> zrange zset1 0 -1 
11 1) "d"
12 2) "b"
13 3) "c"
14 4) "a"
15 127.0.0.1:6379> zrange zset1 0 -1 withscores
16 1) "d"
17 2) "1"
18 3) "b"
19 4) "4"
20 5) "c"
21 6) "5"
22 7) "a"
23 8) "9"
24 127.0.0.1:6379> zrevrange zset1 0 -1
25 1) "a"
26 2) "c"
27 3) "b"
28 4) "d"
29 127.0.0.1:6379> zincrby zset1 1 a
30 "10"
31 127.0.0.1:6379> zrevrange zset1 0 -1 withscores
32 1) "a"
33 2) "10"
34 3) "c"
35 4) "5"
36 5) "b"
37 6) "4"
38 7) "d"
39 8) "1"
           

六、總結一下五種類型的作用

  • 1. String(緩存)
  • 2. List(消息隊列)
  • 3. hash(緩存使用者資訊,可以對每個字段進行單獨存儲)
  • 4. Set(set類似list,特殊之處是set可以自動排重:找兩個人微網誌的共同好友)
  • 5. ZSet(sorted set可以通過使用者額外提供一個優先級(score)的參數來為成員排序,并且是插入有序的,即自動排序。)

繼續閱讀