【Redis】hmdp点赞、排行榜、分页功能的实现
文章目录
1.点赞功能实现
1.1 需求
需求:
- 同一个用户只能点赞一次,再次点击则取消点赞
- 如果当前用户已经点赞,则点赞按钮高亮显示(前端已实现,判断字段Blog类的isLike属性)
1.2 实现步骤
实现步骤:
- 给Blog类中添加一个isLike字段,标示是否被当前用户点赞
- 修改点赞功能,利用Redis的set集合判断是否点赞过,未点赞过则点赞数+1,已点赞过则点赞数-1
- 修改根据id查询Blog的业务,判断当前登录用户是否点赞过,赋值给isLike字段
- 修改分页查询Blog业务,判断当前登录用户是否点赞过,赋值给isLike字段
1.3 思路分析
在实现点赞功能前,我们还需要确定如何使用Redis来存储用户点赞记录?我们知道Redis存储的是键值对数据,那么我们可以先确定“键”的取值为:blog:liked:用户id ,“值”的取值为 用户id。确定好存储的数据之后,我们还需要考虑究竟是我们使用redis的哪种数据结构?因为点赞是有先后顺序的,所以我们采用 SortSet 结构,需求和实现步骤都明晰了后我们开始实现。
点击点赞按钮,发送请求:

1.4 代码实现
代码如下:
@Override
public Result likeBlog(Long id) {
//1.获取当前用户
Long userId = UserHolder.getUser().getId();
//2.判断当前用户是否已经点赞
String key = "blog:liked:" + id;
Double score = stringRedisTemplate.opsForZSet().score(key, userId.toString());
if (score == null) {
//3.如果未点赞,可以点赞
//3.1数据库点赞+1
boolean isSuccess = lambdaUpdate().setSql("liked=liked+1").eq(Blog::getId, id).update();
//3.2.保存用户到redis的SortSet集合 ZADD KEY VALUE SCORE
if (isSuccess) {
stringRedisTemplate.opsForZSet().add(key, userId.toString(), System.currentTimeMillis

本文介绍如何使用Redis实现点赞功能、排行榜及分页查询。针对点赞功能,通过Redis的SortSet确保用户仅能点赞一次,并记录点赞顺序。排行榜功能则展示了如何获取点赞最多的前五名用户。分页查询部分讲解了根据点赞数量进行排序的方法。
最低0.47元/天 解锁文章
2493

被折叠的 条评论
为什么被折叠?



