string: 一般做一些複雜的計數功能的快取
list: 做簡單的訊息佇列的功能
hash: 單點登入
set: 做全域性去重的功能
sortedset: 做排行榜應用,取topn操作;延時任務;做範圍查詢
簡介特性
場景string
(字串)
redis的字串是動態字串,是可以修改的字串,它的內部表示就是乙個字元陣列,
內部結構的實現類似於j**a的arraylist
它的內部結構是乙個帶長度資訊的位元組陣列
可以包含任何資料,比如jpg或者序列化的物件,規定字串的長度不得超過512mb。
redis的字串有兩種儲存方式,在長度特別短時,使用embstr形勢儲存,而長度超過44位元組時候,使用raw形勢儲存
2、將資料以二進位制序列化的方式進行儲存
hash
(字典)
redis的字典相當於j**a語言裡面的hashmap
字典結構內部包含了兩個hashtable,通常情況下只有乙個hashtable是有值的,
但是在字典擴容縮容時候,需要重新分配新的hashtable,然後進行漸進式搬遷,這時候兩個hashtable儲存的分別是舊的hashtable和新的hashtable;待搬遷結束後,舊的hashtable被刪除,新的hashtable取而代之
適合儲存物件,並且可以像資料庫中update乙個屬性一樣只修改某一項屬性值(memcached中需要取出整個字串反序列化成物件修改完再序列化存回去)。
大字典的擴容是比較耗時的,需要重新申請新的陣列,然後將舊字典所有鍊錶中的元素重新掛接到新的陣列下面,這是乙個o(n)級別的操作,作為單執行緒的redis很難承受這樣耗時的過程,所以redis使用漸進式rehash小步搬遷雖然慢一點,但是肯定可以搬完。
list
(列表)
redis的列表相當於j**a的linkedlist
list的結構底層實現不是乙個簡單的linkedlist,而是快速鍊錶(quicklist)。
首先在列表元素較少的情況下,會使用一塊連續的記憶體儲存,這個結構是ziplist,即壓縮列表。它將所有的元素彼此緊挨著一起儲存,分配的是一塊連續的記憶體;當資料量比較多的時候才會改成quicklist。
增刪快,提供了操作某一段元素的api
普通的鍊錶需要的附加指標空間太大,會浪費空間,加重記憶體的碎片化。redis將鍊錶和ziplist結合起來組成了quicklist,也就是將多個ziplist使用雙向指標串聯起來使用,既滿足了快速的插入刪除效能,又不會出現太大的空間冗餘
1、最新訊息排行等功能(比如朋友圈的時間線)
2、訊息佇列
set(集合)
redis的集合相當於j**a語言裡面的hashset,內部的鍵值對是無須的、唯一的
set的結構底層實現是字典,只不過所有的value都是null,其他的特性和字典一摸一樣。
1、新增、刪除、查詢的複雜度都是o(1)
2、為集合提供了求交集、並集、差集等操作
當set集合容納的元素都是整數並且元素個數較少時,redis會使用intset來儲存集合元素。intset是緊湊的陣列結構,同時支援16位,32位和64位整數
1、共同好友
2、利用唯一性,統計訪問**的所有獨立ip
3、好友推薦時,根據tag求交集,大於某個閾值就可以推薦
sorted set
(有序集合)
redis有序列表類似於j**a的sortedset和hashmap的結合體,
一方面是乙個set,保證內部value的唯一性,另一方面可以給每個value賦予乙個score,代表這個value的排序權重。
它的內部實現是乙個hash字典 + 乙個跳表。
資料插入集合時,已經進行天然排序
redis的跳表共有64層,能容納2的64次方個元素。
redis之所以用跳表來實現有序集合
1. 插入、刪除、查詢以及迭代輸出有序序列這幾個操作,紅黑樹都能完成,時間複雜度跟跳表是一樣的。但是按照區間來查詢資料,紅黑樹的效率就沒有跳表高
2. 跳表更容易**實現,比起紅黑樹來說還是好懂、好寫很多,可讀性好,不容易出錯
3. 跳表更加靈活,可以通過改變索引構建策略,有效平衡執行效率和記憶體消耗
1、排行榜,取topn操作
2、帶權重的訊息佇列
redis 資料型別使用場景
redis各個資料型別的使用場景redis支援五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 及zset sorted set 有序集合 redis列表命令 參考 使用場景string string資料結構是簡單的key value型別,value其實不僅可以是str...
redis 資料型別使用場景
redis各個資料型別的使用場景 redis支援五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 及zset sorted set 有序集合 redis列表命令 參考 使用場景string string資料結構是簡單的key value型別,value其實不僅可以是st...
Redis資料型別及使用場景
wqtech閱讀 2936 摘要 redis相比其它的kv資料庫,其一大特點是支援豐富的資料型別.它一共支援5種資料型別,下面逐一介紹這5種資料型別及其使用場景.redis相比其它的kv資料庫,其一大特點是支援豐富的資料型別。它一共支援5種資料型別,下面逐一介紹這5種資料型別及其使用場景和內部實現方...