Redis作者談Redis應用場景

2022-09-15 23:39:22 字數 1391 閱讀 2339

function get_latest_comments(start,num_items):

id_list = redis.lrange("latest.comments",start,start+num_items-1)

if id_list.length < num_items

id_list = sql_db("select ... order by time limit ...")

endreturn id_list

end

如果你還有不同的篩選維度,比如某個分類的最新n條,那麼你可以再建乙個按此分類的list,只存id的話,redis是非常高效的。

這個需求與上面需求的不同之處在於,前面操作以時間為權重,這個是以某個條件為權重,比如按頂的次數排序,這時候就需要我們的sorted set出馬了,將你要排序的值設定成sorted set的score,將具體的資料設定成相應的value,每次只需要執行一條zadd命令即可。

比如你可以把上面說到的sorted set的score值設定成過期時間的時間戳,那麼就可以簡單地通過過期時間排序,定時清除過期資料了,不僅是清除redis中的過期資料,你完全可以把redis裡這個過期時間當成是對資料庫中資料的索引,用redis來找出哪些資料需要過期刪除,然後再精準地從資料庫中刪除相應的記錄。

redis的命令都是原子性的,你可以輕鬆地利用incr,decr命令來構建計數器系統。

這個使用redis的set資料結構最合適了,只需要不斷地將資料往set中扔就行了,set意為集合,所以會自動排重。

使用list可以構建佇列系統,使用sorted set甚至可以構建有優先順序的佇列系統。

在 redis 中一共有5種資料結構,那每種資料結構的使用場景都是什麼呢?

4. set——集合

set 就是乙個集合,集合的概念就是一堆不重複值的組合。利用 redis 提供的 set 資料結構,可以儲存一些集合性的資料。比如在微博應用中,可以將乙個使用者所有的關注人存在乙個集合中,將其所有粉絲存在乙個集合。因為 redis 非常人性化的為集合提供了求交集、並集、差集等操作,那麼就可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存集到乙個新的集合中。

5. sorted set——有序集合

和sets相比,sorted sets是將 set 中的元素增加了乙個權重引數 score,使得集合中的元素能夠按 score 進行有序排列,比如乙個儲存全班同學成績的 sorted sets,其集合 value 可以是同學的學號,而 score 就可以是其考試得分,這樣在資料插入集合的時候,就已經進行了天然的排序。另外還可以用 sorted sets 來做帶權重的佇列,比如普通資訊的 score 為1,重要訊息的 score 為2,然後工作執行緒可以選擇按 score 的倒序來獲取工作任務。讓重要的任務優先執行。

Redis作者談Redis應用場景

毫無疑問,redis開創了一種新的資料儲存思路,使用redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。希望你喜歡這個比喻。function get latest comments sta...

Redis作者談Redis應用場景

毫無疑問,redis 開創了一種新的資料儲存思路,使用redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。希望你喜歡這個比喻。下面是一篇新鮮出爐的文章,其作者是redis作者 antire...

Redis作者談Redis應用場景

毫無疑問,redis開創了一種新的資料儲存思路,使用redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。希望你喜歡這個比喻。下面是一篇新鮮出爐的文章,其作者是redis作者 antirez...