redis開創了一種新的資料儲存思路,使用redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。
redis常用資料型別
redis最為常用的資料型別主要有以下五種:
在具體描述這幾種資料型別之前,我們先通過一張圖了解下redis內部記憶體管理中是如何描述這些不同資料型別的:
首先redis內部使用乙個redisobject物件來表示所有的key和value,redisobject最主要的資訊如上圖所示:type代表乙個value物件具體是何種資料型別,encoding是不同資料型別在redis內部的儲存方式,比如:type=string代表value儲存的是乙個普通字串,那麼對應的encoding可以是raw或者是int,如果是int則代表實際redis內部是按數值型類儲存和表示這個字串的,當然前提是這個字串本身可以用數值表示,比如:"123" "456"這樣的字串。
這裡需要特殊說明一下vm欄位,只有開啟了redis的虛擬記憶體功能,此字段才會真正的分配記憶體,該功能預設是關閉狀態的,該功能會在後面具體描述。通過上圖我們可以發現redis使用redisobject來表示所有的key/value資料是比較浪費記憶體的,當然這些記憶體管理成本的付出主要也是為了給redis不同資料型別提供乙個統一的管理介面,實際作者也提供了多種方法幫助我們盡量節省記憶體使用,我們隨後會具體討論。
下面我們先來逐一的分析下這五種資料型別的使用和內部實現方式:
sorted set
常用命令:
zadd,zrange,zrem,zcard等
使用場景:
redis sorted set的使用場景與set類似,區別是set不是自動有序的,而sorted set可以通過使用者額外提供乙個優先順序(score)的引數來為成員排序,並且是插入有序的,即自動排序。當你需要乙個有序的並且不重複的集合列表,那麼可以選擇sorted set資料結構,比如twitter 的public timeline可以以發表時間作為score來儲存,這樣獲取時就是自動按時間排好序的。
實現方式:
redis sorted set的內部使用hashmap和跳躍表(skiplist)來保證資料的儲存和有序,hashmap裡放的是成員到score的對映,而跳躍表裡存放的是所有的成員,排序依據是hashmap裡存的score,使用跳躍表的結構可以獲得比較高的查詢效率,並且在實現上比較簡單。
Redis應用場景
redis開創了一種新的資料儲存思路,使用redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。redis常用資料型別 redis最為常用的資料型別主要有以下五種 在具體描述這幾種資料型別之...
Redis應用場景
閱讀 31,232 次 毫無疑問,redis 開創了一種新的資料儲存思路,使用redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。希望你喜歡這個比喻。下面是一篇新鮮出爐的文章,其作者是re...
redis應用場景
一 incr,incrby,decr,decrby 遞增,原子操作,無論多少個客戶端連線都是原子操作,避免出現競態條件 race condition 字串set key value mset key1 v1 key2 v2 同時設定多個鍵值 mget key1 key2.同時獲取多個值 strlen...