基于redis的收藏服務的設計思考

背景

一個收藏服務該如何設計,來滿足基本的業(yè)務的需求

用戶收藏/取消一個視頻,文章
用戶查看收藏視頻列表,文章列表,按照時間排序,支持翻頁
用戶看具體一個/多個視頻,文章,檢查是否被收藏
用戶查看收藏視頻列表,文章列表總數(shù)

對象

上面提到的文章,視頻,就是實體類型,抽象為ObjectType
文章有文章id,如article id,視頻有視頻id,如video id
上面提到的用戶,即UserId

設計

里面的排序方式可以以redis的有序集合為例,滿足排序等場景的要求
這里直接列舉出來

收藏: zadd
方式: ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
參數(shù):
-- KEY:{userId}_{objectType}
-- SCORE1:time.now()
-- VALUE1: objectId
說明:score傳時間值, 滿足后續(xù)按時間排序

取消收藏: zrem
方式:ZREM key member [member ...]
參數(shù):
-- KEY:{userId}_{objectType}
-- member: objectId

是否收藏: ZSCORE
方式: ZSCORE key member
參數(shù):
-- key:{userId}_{objectType}
-- member:{objectId}
說明:滿足看是否收藏不同類型的對象id,是否收藏視頻A1,是否收藏文章B2

收藏列表,帶時間排序: ZREMRANGEBYSCORE
方式:ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
參數(shù):
-- key:{userId}_{objectType}
-- min: time(0)
-- max: time.now()
-- offset:0
-- count: maxInt
說明:滿足按收藏類型按時間新老(time.now() - > time(0))排序

收藏數(shù): ZCARD
方式:ZCARD KEY_NAME
參數(shù):
-- key:{userId}_{objectType}
說明:收藏某一個類型實體的數(shù)量

可以看到,上面的redis有序集合已經滿足了我們最簡單的需求

拓展思考

假設再有其他的場景

一個視頻總共被多少人收藏過,被哪些人收藏過
兩個人共同收藏的視頻列表,視頻總數(shù)

等等延伸開的實體與關系之間的量化表達,分析,如何來實現(xiàn)
基本的redis實現(xiàn)也不能完全cover,可以用到其他方式

比如圖數(shù)據(jù)庫,可以理解為一堆點和邊的處理,參照refer
點即為同構或者異構的實體類型,
邊理解為兩兩之前的關系(可單向,雙向),可以用來表示收藏,關注等動作關系
可以基于此做進一步分析,比如二度人脈,等等
這里不展開介紹,后面看了再說

refer

redis有序集合
圖數(shù)據(jù)庫

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容