【Redis】hmdp点赞、排行榜、分页功能的实现

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

【Redis】hmdp点赞、排行榜、分页功能的实现

1.点赞功能实现


1.1 需求

需求:

  • 同一个用户只能点赞一次,再次点击则取消点赞
  • 如果当前用户已经点赞,则点赞按钮高亮显示(前端已实现,判断字段Blog类的isLike属性)

1.2 实现步骤

实现步骤:

  1. 给Blog类中添加一个isLike字段,标示是否被当前用户点赞
  2. 修改点赞功能,利用Redis的set集合判断是否点赞过,未点赞过则点赞数+1,已点赞过则点赞数-1
  3. 修改根据id查询Blog的业务,判断当前登录用户是否点赞过,赋值给isLike字段
  4. 修改分页查询Blog业务,判断当前登录用户是否点赞过,赋值给isLike字段

1.3 思路分析

在实现点赞功能前,我们还需要确定如何使用Redis来存储用户点赞记录?我们知道Redis存储的是键值对数据,那么我们可以先确定“键”的取值为:blog:liked:用户id ,“值”的取值为 用户id。确定好存储的数据之后,我们还需要考虑究竟是我们使用redis的哪种数据结构?因为点赞是有先后顺序的,所以我们采用 SortSet 结构,需求和实现步骤都明晰了后我们开始实现。

点击点赞按钮,发送请求:

image-20230131145255229


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值