亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用 Redis 緩存實現(xiàn)點贊和取消點贊的示例代碼

 更新時間:2021年03月15日 10:44:04   作者:gnulxj  
這篇文章主要介紹了使用 Redis 緩存實現(xiàn)點贊和取消點贊的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

點贊功能是很多平臺都會提供的一個功能,那么,我們要如何實現(xiàn)點贊和取消點贊呢?

這篇文章總結了我在項目中實現(xiàn)點贊的方法。

緩存 vs 數(shù)據(jù)庫?

首先我們要考慮的是數(shù)據(jù)要放到哪里,很多時候我們都會把數(shù)據(jù)放到數(shù)據(jù)庫(如 MySQL),由于關系型數(shù)據(jù)庫的穩(wěn)定性,大部分場景下我們也都會使用關系數(shù)據(jù)庫來存儲數(shù)據(jù)。

不過,在一些特殊的場景下,傳統(tǒng)的關系型數(shù)據(jù)庫很可能無法滿足我們的需求。比如,在訪問量較大的情況下,數(shù)據(jù)庫很可能會宕機或者訪問速度非常慢。這對用戶來說是不能容忍的。因此就有了非關系型數(shù)據(jù)庫,如 Redis 作為緩存,將數(shù)據(jù)放到內(nèi)存中,實現(xiàn)數(shù)據(jù)的快速獲取。下面我們就來看看如何使用 Redis 緩存實現(xiàn)點贊功能。

Redis 基本數(shù)據(jù)結構

數(shù)據(jù)結構 含義
string 字符串變量
list 鏈表
hash 映射表
set 無序集合
zset 有序集合

具體介紹可以參考這篇博客

點贊相關操作

  • 對帖子點贊
  • 對帖子取消點贊
  • 查看帖子點贊數(shù)

我們可以先定義一個接口,包含了點贊的相關操作:

public interface LikeCacheService {

 /**
  * 獲取更新過的點贊帖子 id
  * @return
  */
 Set<Object> listUpdatedPost();

 /**
  * 測試用戶是否已經(jīng)對帖子點過贊
  * @param userId 點贊用戶 id
  * @param postId 待測試帖子 id
  * @return true if user has liked post
  */
 boolean hasLiked(Integer userId, Long postId);

 /**
  * 獲取帖子點贊數(shù)
  * @param postId 帖子 id
  * @return 帖子的點贊數(shù)
  */
 Integer getLikeCount(Long postId);

 /**
  * 點贊
  * @param uid 用戶 id
  * @param pid 帖子 id
  */
 void like(Integer uid, Long pid);

 /**
  * 取消點贊
  * @param uid 用戶 id
  * @param pid 帖子 id
  */
 void unlike(Integer uid, Long pid);

 /**
  * 某個帖子的點贊數(shù) +1
  * @param pid 帖子 id
  */
 void incrLikedCount(Long pid);

 /**
  * 某個帖子的點贊數(shù) -1
  * @param pid 帖子 id
  */
 void decrLikedCount(Long pid);

 /**
  * 刪除某個帖子的點贊信息
  * @param pid 帖子 id
  */
 void deletePostLikeSet(Long pid);

 /**
  * 獲取帖子點贊數(shù)據(jù)列表
  */
 List<FmsUserLikePost> listLikedData();

 /**
  * 獲取帖子點贊數(shù)列表
  */
 List<FmsLikedCountDTO> listLikedCount();

 /**
  * 同步帖子點贊數(shù)據(jù)到數(shù)據(jù)庫
  */
 void syncLikeDataToDatabase();
}

接下來,我們考慮一下要使用哪些數(shù)據(jù)結構來實現(xiàn)這些功能。

首先,點贊操作和取消點贊不能重復操作的,也就是不能連續(xù)點多次贊或者連續(xù)取消多次贊,每個用戶只能對某帖子點一次贊,因此我們可以使用 set 來存儲每個帖子的點贊用戶,key 為帖子 id,value 為 每個對該帖子點贊的用戶 id 集合。

  • 點贊:將點贊用戶 id 加入對應帖子的點贊用戶集
  • 取消點贊:將點贊用戶 id 從對應帖子的點贊用戶集移除

然后就是帖子點贊數(shù)的統(tǒng)計,由于每個帖子都對應一個點贊數(shù),因此我們可以使用 hash 結構存儲帖子的點贊數(shù),key 為帖子 id,value 為該帖子的點贊數(shù)。

  • 點贊:對應 hash 結構的 value + 1
  • 取消點贊:對應 hash 結構的 value - 1

此外,為了保證數(shù)據(jù)的可恢復性,我們可以將 Redis 緩存中的數(shù)據(jù)定時寫入關系型數(shù)據(jù)庫中,進行數(shù)據(jù)持久化。

具體的實現(xiàn)代碼可以參考這個項目的代碼:FmsLikeCacheServiceImpl.java。

到此這篇關于使用 Redis 緩存實現(xiàn)點贊和取消點贊的實現(xiàn)示例的文章就介紹到這了,更多相關Redis點贊和取消點贊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot上傳臨時文件被刪除引起報錯的解決

    SpringBoot上傳臨時文件被刪除引起報錯的解決

    這篇文章主要介紹了SpringBoot上傳臨時文件被刪除引起報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • IntelliJ IDEA的數(shù)據(jù)庫管理工具實在太方便了(推薦)

    IntelliJ IDEA的數(shù)據(jù)庫管理工具實在太方便了(推薦)

    這篇文章主要介紹了IntelliJ IDEA的數(shù)據(jù)庫管理工具實在太方便了,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 通過openOffice將office文件轉成pdf

    通過openOffice將office文件轉成pdf

    這篇文章主要介紹了通過openOffice將office文件轉成pdf,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot-application.yml多環(huán)境配置詳解

    SpringBoot-application.yml多環(huán)境配置詳解

    本文主要介紹了SpringBoot-application.yml多環(huán)境配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • 詳談Spring是否支持對靜態(tài)方法進行Aop增強

    詳談Spring是否支持對靜態(tài)方法進行Aop增強

    這篇文章主要介紹了Spring是否支持對靜態(tài)方法進行Aop增強,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 查看java對象所占內(nèi)存大小的方法

    查看java對象所占內(nèi)存大小的方法

    這篇文章主要為大家介紹了如何查看java對象所占內(nèi)存大小的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Java關鍵字super超詳細解釋

    Java關鍵字super超詳細解釋

    在Java中super是一個關鍵字,用于訪問父類中的屬性、方法或構造函數(shù),這篇文章主要給大家介紹了關于Java關鍵字super超詳細解釋的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Java多線程之JUC(java.util.concurrent)的常見類(多線程編程常用類)

    Java多線程之JUC(java.util.concurrent)的常見類(多線程編程常用類)

    這篇文章主要給大家介紹了關于Java多線程之JUC(java.util.concurrent)的常見類(多線程編程常用類)的相關資料,Java中的JUC(java.util.concurrent)包提供了一些并發(fā)編程中常用的類,這些類可以幫助我們更方便地實現(xiàn)多線程編程,需要的朋友可以參考下
    2024-02-02
  • Jsoup獲取全國地區(qū)數(shù)據(jù)屬性值(省市縣鎮(zhèn)村)

    Jsoup獲取全國地區(qū)數(shù)據(jù)屬性值(省市縣鎮(zhèn)村)

    這篇文章主要介紹了Jsoup獲取全國地區(qū)數(shù)據(jù)屬性值(省市縣鎮(zhèn)村)的相關資料,需要的朋友可以參考下
    2015-10-10
  • 分享40個Java多線程問題小結

    分享40個Java多線程問題小結

    多個線程共存于同一JVM進程里面,所以共用相同的內(nèi)存空間,較之多進程,多線程之間的通信更輕量級,本文給大家分享40個Java多線程問題小結 的相關資料,需要的朋友可以參考下
    2015-12-12

最新評論