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

2021-10-10 17:40:23 字數 1339 閱讀 8741

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

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

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

redis主要的特點就是快, 畢竟主要資料都在記憶體嘛; 另外為啥我選擇redis而不是memcache的主要原因在於redis支援更多的資料型別, 例如hash, set, zset等。 下面具體的會用到這幾個型別。

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

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

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

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

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

1、寫入post_set

將post_id寫入post_set

2、寫入post_user_like_set_

將user_id寫入post_user_like_set_

3、寫入post_user_like_

將使用者點讚資料, 例如贊狀態, post_id, user_id, ctime(操作時間), mtime(修改時間)寫入post_user_like中 4、更新postcounter

更新post_counter, 這裡的更新稍晚複雜一點, 需要和前面一樣先獲取當前使用者是否對這個post點過贊

如果點過, 並且本次是取消贊, counter減一, 如果沒點過, 本次是點讚, counter加一。

如果原來是取消贊的情況, 本次是點讚, counter加一。

迴圈從post_set中pop出來乙個post_id至到空

根據 , 每次從post_user_like_set_中pop出來乙個user_id直到空 根據post_id, user_id, 直接獲取對應的hash表的內容(post_user_like__ 將hash表中的資料寫入user_like_post表中

將post_counter中的資料和post_like中的資料相加, 將結果寫入到post_like表中 頁面展示

1、查詢使用者點讚情況

前面已經說過, 需要同時查詢redis和mysql

2、查詢post點讚統計

同樣需要查詢redis中的post_counter和mysql的post_like表, 並將兩者相加 得到的結果才是正確的結果

redis實現點讚功能參考

public void likearticle long articleid,long likeduserid,long likedpostid likeduserid likedpostid articleid,likeduserid,likedpostid synchronized this l...

基於redis的點讚功能設計

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

基於redis的點讚功能設計

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