一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 使用 Redis 緩存實現點贊和取消點贊的示例代碼

使用 Redis 緩存實現點贊和取消點贊的示例代碼

2021-08-24 11:15gnulxj Java教程

這篇文章主要介紹了使用 Redis 緩存實現點贊和取消點贊的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

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

緩存 vs 數據庫?

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

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

Redis 基本數據結構

 

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

 

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

點贊相關操作

  • 對帖子點贊
  • 對帖子取消點贊
  • 查看帖子點贊數

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public interface LikeCacheService {
 
 /**
  * 獲取更新過的點贊帖子 id
  * @return
  */
 Set<Object> listUpdatedPost();
 
 /**
  * 測試用戶是否已經對帖子點過贊
  * @param userId 點贊用戶 id
  * @param postId 待測試帖子 id
  * @return true if user has liked post
  */
 boolean hasLiked(Integer userId, Long postId);
 
 /**
  * 獲取帖子點贊數
  * @param postId 帖子 id
  * @return 帖子的點贊數
  */
 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);
 
 /**
  * 某個帖子的點贊數 +1
  * @param pid 帖子 id
  */
 void incrLikedCount(Long pid);
 
 /**
  * 某個帖子的點贊數 -1
  * @param pid 帖子 id
  */
 void decrLikedCount(Long pid);
 
 /**
  * 刪除某個帖子的點贊信息
  * @param pid 帖子 id
  */
 void deletePostLikeSet(Long pid);
 
 /**
  * 獲取帖子點贊數據列表
  */
 List<FmsUserLikePost> listLikedData();
 
 /**
  * 獲取帖子點贊數列表
  */
 List<FmsLikedCountDTO> listLikedCount();
 
 /**
  * 同步帖子點贊數據到數據庫
  */
 void syncLikeDataToDatabase();
}

接下來,我們考慮一下要使用哪些數據結構來實現這些功能。

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

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

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

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

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

具體的實現代碼可以參考這個項目的代碼:FmsLikeCacheServiceImpl.java

到此這篇關于使用 Redis 緩存實現點贊和取消點贊的實現示例的文章就介紹到這了,更多相關Redis點贊和取消點贊內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/gnulxj/p/13179454.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 息与子中文字幕在线 | 国产成人精品在线观看 | 娇妻被老外疯狂调教 | 男人狂擦女人的下面视频 | 亚洲 欧美 制服 校园 动漫 | 日本动漫啪啪动画片mv | 91好色 | 午夜想想爱午夜剧场 | 男人把大ji巴放进女人小说 | 91制片厂(果冻传媒)原档破解 | 91粉色视频在线导航 | 被高跟鞋调教丨vk | 久久成人永久免费播放 | 女教师雪白老汉 | 精品久久香蕉国产线看观看亚洲 | 国产午夜永久福利视频在线观看 | 国产在线精品99一卡2卡 | 韩国三级日本三级香港三级黄 | 99热这里只有精品在线 | 国产网站免费看 | 天天性综合 | 99热精品成人免费观看 | 欧美人人干 | 秋霞理论一级在线观看手机版 | julia ann黑人巨大| 国产成人在线视频播放 | 亚洲成色www久久网站 | 国产精品福利一区二区亚瑟 | 五月色天在线视频综合观看 | 亚洲人成影院午夜网站 | 欧美日韩精品亚洲精品v18 | 国产rpg迷雾之风冷狐破解 | 2022国产麻豆剧果冻传媒入口 | ai换脸明星造梦工厂忘忧草 | 国产亚洲精品aaa大片 | asian4you裸模| 久久久久久久久a免费 | 国产一区二区三区在线观看视频 | 国产xx肥老妇视频奂费 | 九九99亚洲精品久久久久 | 免费看又黄又爽又猛的视频软件- |