gpt4 book ai didi

使用 Redis 缓存实现点赞和取消点赞的示例代码

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 29 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章使用 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 。

最后此篇关于使用 Redis 缓存实现点赞和取消点赞的示例代码的文章就讲到这里了,如果你想了解更多关于使用 Redis 缓存实现点赞和取消点赞的示例代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com