redis常用的數(shù)據(jù)結(jié)構(gòu)有
- string
- list
- set
- zset
- hash
string
string 是 Redis 的基本的數(shù)據(jù)類型,一個 key 對應(yīng)一個 value。string 類型是二進(jìn)制安全的,Redis的string可以包含任何數(shù)據(jù),比如圖片或者序列化的對象,一個redis中字符串value最多可以是512M。
value可以存儲json格式,數(shù)值型等。
使用場景
string使用場景一般是存儲簡單的鍵值類型。比如用戶信息,登錄信息,配置信息等。還有一種用得比較多的是string的incr/decr操作,即自增、自減操作。調(diào)用它是原子性的,無論調(diào)用多少次,都一一計算成功。例如需要增減庫存的操作。
盡管string的value可以存儲很大,甚至500多MB的容量。但是在性能上來說,我們見諒存儲value的值不要超過1M。
hash
hash是一個鍵值對集合,是一個string類型的key和value的映射表,key還是key,但是value是一個鍵值對(key-value)。類比于JAVA里面的 Map<String, Map<String, Object>>集合。
使用場景
比如需要有兩層key的應(yīng)用常見,通過刪除一個key可以刪除所有內(nèi)容。例如一個商品有很多規(guī)格,規(guī)格里面有不同的值。
需要注意的是,經(jīng)過測試,在性能上來說一般hash里面的第二層key,不要超過200個為佳。盡管hash里面的key-value能達(dá)到500多MB的存儲容量。
list
list列表,它是簡單的字符串列表,按照插入順序排序,可以添加一個元素到列表的頭(左邊)或者尾部(右邊),它的底層實際上是個鏈表。
使用場景
list可以使用左推、左拉、右推、右拉的方式。所以你可以使用list作為集合存儲,比如存儲某寶商鋪里面的所有商品。
也可以用作輕量級別的隊列來使用。左推左拉、右推右拉。
需要注意的是盡管redis可以使用推拉的隊列模式,但是一定要注意場景。因為redis的隊列是一種輕量級別的,沒有隊列重試、隊列重放機(jī)制。消費完隊列消息在redis代表已經(jīng)刪除了。
set
Redis的set是string類型的無序集合。
使用場景
如保存一些標(biāo)簽的名字。標(biāo)簽的名字不可以重復(fù),順序是可以無序的。
需要注意的是使用set一定不要存儲大量的數(shù)據(jù)。value的值不宜過大,并且集合數(shù)量不宜過大。幾百個集合的值,value不超過1MB為佳。
zset
zset(sorted set有序集合),和上面的set數(shù)據(jù)類型一樣,也是string類型元素的集合,但是它是有序的。
使用場景
sortset的使用場景一般是排行榜之類的場景