基於redis的點讚功能設計

2021-08-20 21:58:36 字數 1146 閱讀 7292

點讚其實是乙個很有意思的功能。基本的設計思路有大致兩種, 一種自然是用mysql等

資料庫直接落地儲存, 另外一種就是利用點讚的業務特徵來扔到redis(或memcache)中, 然後離線刷回mysql等。

直接寫入mysql是最簡單的做法。

做兩個表即可,

redis主要的特點就是快, 畢竟主要資料都在記憶體嘛;

另外為啥我選擇redis而不是memcache的主要原因在於redis支援更多的資料型別, 例如hash, set, zset等。

下面具體的會用到這幾個型別。

這一塊和寫入寫mysql是一樣的,畢竟是要落地儲存的。

所以還是同樣的需要post_like, user_like_post這兩表儲存文章被點讚的個數(等統計), 使用者對那些文章點了贊(取消贊)。

這兩表分別通過post_id, user_id進行關聯。

redis設計部分:

在redis中弄乙個set存放所有被點讚的文章

對每個post以post_id作為key, 搞乙個set存放所有對該post點讚的使用者;

將每個使用者對每個post的點讚情況放到乙個hash裡面去, hash的字段就

隨意跟進需求來處理就行了。

為啥用hash

只所以用hash是因為完全可以用hash來儲存乙個點贊的物件, 對應資料庫的

一行記錄。

當然有同學會說用key, value也可以, 將所有的資料序列化(json_encode等)

後全部放到value裡面去。 反覆序列化也是乙個很大的開銷不是, hash可以很

方便的修改某個字段, 而序列化和反序列化的操作。

對每個post維護乙個計數器, 用來記錄當前在redis中的點讚數,

這裡我們只用counter記錄尚未同步到mysql中的點讚數(可以為負), 每次

刷回mysql中時將counter中的資料和資料庫已有的讚數相加即可。

獲取user_id, post_id, 查詢該使用者是否已經點過贊, 已點過則不允許再次點讚,

或者設計為前端允許使用者點, 只是後台不重複計算;

這裡需要注意的是使用者點讚的記錄可能在資料庫中, 也可能在快取中, 所以查詢的時候

快取和資料庫都要查詢, 快取沒有再查詢資料庫。

將使用者的點讚/取消贊的情況記錄在redis中, 具體為:

基於redis的點讚功能設計

點讚其實是乙個很有意思的功能。基本的設計思路有大致兩種,一種自然是用mysql等 資料庫直接落地儲存,另外一種就是利用點讚的業務特徵來扔到redis 或memcache 中,然後離線刷回mysql等。直接寫入mysql是最簡單的做法。做兩個表即可,redis主要的特點就是快,畢竟主要資料都在記憶體嘛...

基於redis實現的點讚功能設計

點讚是我們現在經常見到的乙個效果,如朋友圈 微博都有點贊的效果,下面這篇文章主要跟大家分享了基於 redis實現的點讚功能設計思路的相關資料,文中介紹的非常詳細,對大家實現點讚功能具有一定的參考學習價 值,需要的朋友們下面來一起看看吧。點讚其實是乙個很有意思的功能。基本的設計思路有大致兩種,一種自然...

基於redis的點讚功能設計(張高偉)

點讚其實是乙個很有意思的功能。基本的設計思路有大致兩種,一種自然是用mysql等 資料庫直接落地儲存,另外一種就是利用點讚的業務特徵來扔到redis 或memcache 中,然後離線刷回mysql等。直接寫入mysql是最簡單的做法。做兩個表即可,redis主要的特點就是快,畢竟主要資料都在記憶體嘛...