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) "hao@163.com"
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) "hao@163.com"
5) "name2"
6) "xiaohao"
7) "email2"
8) "xiaohao@163.com"
復制代碼

實戰場景:

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>
復制代碼

實戰場景:

1.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一般應用場景
緩存會話(單點登錄)
分布式鎖,比如:使用setnx
各種排行榜或計數器
商品列表或用戶基礎數據列表等
使用list作為消息對列
秒殺,庫存扣減等
 

五種類型的應用場景

String,redis對於KV的操作效率很高,可以直接用作計數器。例如,統計在線人數等等,另外string類型是二進制存儲安全的,所以也可以使用它來存儲圖片,甚至是視頻等。
hash,存放鍵值對,一般可以用來存某個對象的基本屬性信息,例如,用戶信息,商品信息等,另外,由於hash的大小在小於配置的大小的時候使用的是ziplist結構,比較節約內存,所以針對大量的數據存儲可以考慮使用hash來分段存儲來達到壓縮數據量,節約內存的目的,例如,對於大批量的商品對應的圖片地址名稱。比如:商品編碼固定是10位,可以選取前7位做為hash的key,后三位作為field,圖片地址作為value。這樣每個hash表都不超過999個,只要把redis.conf中的hash-max-ziplist-entries改為1024,即可。
list,列表類型,可以用於實現消息隊列,也可以使用它提供的range命令,做分頁查詢功能。
set,集合,整數的有序列表可以直接使用set。可以用作某些去重功能,例如用戶名不能重復等,另外,還可以對集合進行交集,並集操作,來查找某些元素的共同點
zset,有序集合,可以使用范圍查找,排行榜功能或者topN功能。


原文鏈接:https://www.cnblogs.com/haoprogrammer/p/11065461.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM