Redis實現點讚功能模組

2021-09-28 16:38:33 字數 2234 閱讀 7043

之前看了一篇文章,講redis的應用場景,其中乙個應用場景就是實現點讚功能,紙上得來恐覺淺,必須實戰一波

使用者某篇文章的點讚數 使用hashmap資料結構,hashmap中的key為articleid,value為set,set中的值為使用者id,即hashmap

使用者總的點讚數 使用hashmap資料結構,hashmap中的key為userid,value為string記錄總的點讚數

使用者點讚的文章 使用hashmap資料結構,hashmap中的key為userid,value為set,set中的值為文章id,即hashmap

article表結構

字段值字段型別

說明article_name

varchar

文章名字

content

blob

文章內容

total_like_count

bigint

文章總點讚數

文章總的點讚數需要和redis中的點讚數進行同步

user_like_article表結構

字段值字段型別

說明user_id

bigint

使用者id

article_id

bigint

文章id

記錄使用者點讚文章的資訊,是一張中間表

說明:表結構設計省略了id、deleted、gmt_create、gmt_modified欄位

流程圖比較簡單,點讚和取消點讚基本實現步驟相同

public

void

likearticle

(long articleid, long likeduserid, long likedpostid)

,likeduserid:{},likedpostid:{}"

, articleid, likeduserid, likedpostid)

;synchronized

(this

),likeduserid:{},likedpostid:{}"

, articleid, likeduserid, likedpostid);}

}

public

void

unlikearticle

(long articleid, long likeduserid, long likedpostid)

,likeduserid:{},likedpostid:{}"

, articleid, likeduserid, likedpostid)

;//1.使用者總點讚數-1

synchronized

(this

) logger.

info

("取消點讚資料存入redis結束,articleid:{},likeduserid:{},likedpostid:{}"

, articleid, likeduserid, likedpostid)

;}

@scheduled

(cron =

"0 0 0/1 * * ? "

)public

void

redisdatatomysql()

,開始執行redis資料持久化到mysql任務"

, localdatetime.

now().

format

(formatter));

//1.更新文章總的點讚數

maparticlecountmap = redistemplate.

opsforhash()

.entries

(article_liked_user_key)

;for

(map.entry

entry : articlecountmap.

entryset()

) logger.

info

("time:{},結束執行redis資料持久化到mysql任務"

, localdatetime.

now().

format

(formatter));

}

說明:

歡迎fork與 star,如有紕漏歡迎指正

redis實現點讚功能參考

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

點讚功能與redis

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

點讚功能與redis

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