1. 程式人生 > 實用技巧 >Redis 五大資料結構

Redis 五大資料結構

Redis五種資料結構如下:

對redis來說,所有的key(鍵)都是字串。

1.String 字串型別

是redis中最基本的資料型別,一個key對應一個value。

String型別是二進位制安全的,意思是 redis 的 string 可以包含任何資料。如數字,字串,jpg圖片或者序列化的物件。

使用:get 、 set 、 del 、 incr、 decr 等

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379> get counter "2" 127.0.0.1:6379> incr counter (integer) 3 127.0.0.1:6379> get counter "3" 127.0.0.1:6379> incrby counter 100 (integer) 103 127.0.0.1:6379> get counter "103" 127.0.0.1:6379> decr counter (integer) 102 127.0.0.1:6379> get counter "102"

實戰場景:

1.快取: 經典使用場景,把常用資訊,字串,圖片或者視訊等資訊放到redis中,redis作為快取層,mysql做持久化層,降低mysql的讀寫壓力。

2.計數器:redis是單執行緒模型,一個命令執行完才會執行下一個,同時資料可以一步落地到其他的資料來源。

3.session:常見方案spring session + redis實現session共享,

2.Hash (雜湊)

是一個Mapmap,指值本身又是一種鍵值對結構,如 value={{field1,value1},......fieldN,valueN}}

使用:所有hash的命令都是 h 開頭的 hget 、hset 、 hdel 等

127.0.0.1:6379> hset user name1 hao
(integer) 1
127.0.0.1:6379> hset user email1 hao@163.com
(integer) 
1 127.0.0.1:6379> hgetall user 1) "name1" 2) "hao" 3) "email1" 4) "[email protected]" 127.0.0.1:6379> hget user user (nil) 127.0.0.1:6379> hget user name1 "hao" 127.0.0.1:6379> hset user name2 xiaohao (integer) 1 127.0.0.1:6379> hset user email2 xiaohao@163.com (integer) 1 127.0.0.1:6379> hgetall user 1) "name1" 2) "hao" 3) "email1" 4) "[email protected]" 5) "name2" 6) "xiaohao" 7) "email2" 8) "[email protected]"

實戰場景:

1.快取: 能直觀,相比string更節省空間,的維護快取資訊,如使用者資訊,視訊資訊等。

3.連結串列

List 說白了就是連結串列(redis 使用雙端連結串列實現的 List),是有序的,value可以重複,可以通過下標取出對應的value值,左右兩邊都能進行插入和刪除資料。

使用列表的技巧

  • lpush+lpop=Stack(棧)
  • lpush+rpop=Queue(佇列)
  • lpush+ltrim=Capped Collection(有限集合)
  • lpush+brpop=Message Queue(訊息佇列)

使用:

127.0.0.1:6379> lpush mylist 1 2 ll ls mem
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "mem"
2) "ls"
3) "ll"
4) "2"
5) "1"
127.0.0.1:6379>

實戰場景.timeline:例如微博的時間軸,有人釋出微博,用lpush加入時間軸,展示新的列表資訊。

4.Set 集合

集合型別也是用來儲存多個字串的元素,但和列表不同的是集合中 1. 不允許有重複的元素,2.集合中的元素是無序的,不能通過索引下標獲取元素,3.支援集合間的操作,可以取多個集合取交集、並集、差集。

使用:命令都是以s開頭的 sset 、srem、scard、smembers、sismember

127.0.0.1:6379> sadd myset hao hao1 xiaohao hao
(integer) 3
127.0.0.1:6379> SMEMBERS myset
1) "xiaohao"
2) "hao1"
3) "hao"
127.0.0.1:6379> SISMEMBER myset hao
(integer) 1

實戰場景;

1.標籤(tag),給使用者新增標籤,或者使用者給訊息新增標籤,這樣有同一標籤或者類似標籤的可以給推薦關注的事或者關注的人。

2.點贊,或點踩,收藏等,可以放到set中實現

5.zset 有序集合

有序集合和集合有著必然的聯絡,保留了集合不能有重複成員的特性,區別是,有序集合中的元素是可以排序的,它給每個元素設定一個分數,作為排序的依據。

(有序集合中的元素不可以重複,但是score 分數 可以重複,就和一個班裡的同學學號不能重複,但考試成績可以相同)。

使用: 有序集合的命令都是 以 z 開頭 zadd 、 zrange、 zscore

127.0.0.1:6379> zadd myscoreset 100 hao 90 xiaohao
(integer) 2
127.0.0.1:6379> ZRANGE myscoreset 0 -1
1) "xiaohao"
2) "hao"
127.0.0.1:6379> ZSCORE myscoreset hao
"100"

實戰場景:

1.排行榜:有序集合經典使用場景。例如小說視訊等網站需要對使用者上傳的小說視訊做排行榜,榜單可以按照使用者關注數,更新時間,字數等打分,做排行。

感謝觀看。感謝支援。

參考:

redis官網