Redis應用場景

2021-06-21 00:06:30 字數 1233 閱讀 3207

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...