redis实现点赞功能

功能实现,

1.用户只能点赞一次,第二次是取消

2.两个接口,一个点赞接口,一个点赞回显的接口

1.点赞接口

前端实现

 <el-button icon="el-icon-star-on" @click="like()" :style={color:color}
      ><div>{{ article.liked }}</div></el-button
    >

第一个color是css的color 第二个color是在date里定义的变量,article.liked是点赞数,vuerouter传过来的

color是颜色,islike是判断该用户是否点赞,后端传过来的,this.artcle.liked是点赞数

  async like(){

    switch (this.color){
      case "red":
        this.color=""
        this.article.liked--
        break;
      case "":
        this.color="red"
        this.article.liked++
        break;
    }
        await like(this.id,this.token,this.article.liked);
  
  }

like函数,swich判断点赞颜色来修改点赞数和颜色(用户是否点赞),await是一个点赞请求

export function like(id, token, liked) {
    return axios.post("http://localhost:8088/" + id + "/like",

        querystring.stringify({
            id: id,
            liked: liked
        }),
        { headers: { 'authorization': token } },
    ).then((res) => {
        // console.log(res.data.data)
        return res.data.data
    })

}

liked接口后端代码

    @PostMapping("/{id}/like")
    public  Result likeblog(@PathVariable(value = "id") int id, HttpServletRequest request, int liked){
        String token = request.getHeader("Authorization");
        Map<String, Object> map = jwtutil.parsetoken(token);
        String username = map.get("username").toString();
        System.out.println("dsa"+username);

        //1.获取用户
//        dfdsf dfdsf=usermapper.select(username);
        //2.判断用户是否点赞
        Boolean member = stringRedisTemplate.opsForSet().isMember(String.valueOf(id),username);
        System.out.println(member);
        if(member==false){
            usermapper.updatabylike(liked,id);
            stringRedisTemplate.opsForSet().add(String.valueOf(id),username);

        }
        else{
            usermapper.updatabylike(liked,id);
            stringRedisTemplate.opsForSet().remove(String.valueOf(id),username);
        }

        //如果未点赞 点赞+1
        //数据库+1
        //如果点赞 点赞-1
        //数据库-1
        return Result.success();

这里说一下,前端传过来的liked是已经点过赞的liked数据了,存入数据库就直接usermapper.updatabylike(liked,id)就行了

说一下,id是这篇文章的id,唯一标识,如果没点赞(member==false)就将这个用户存入redis的set集合中,点赞了取消就移除这个set集合

2.回显接口

后端代码(这里先看后端更好理解一点)

    @GetMapping("/{id}/back")
    public Result back(@PathVariable(value = "id") int id,HttpServletRequest request){
        String token = request.getHeader("Authorization");
        Map<String, Object> map = jwtutil.parsetoken(token);
        String username = map.get("username").toString();
        Boolean member =stringRedisTemplate.opsForSet().isMember(String.valueOf(id),username);
        if(member==true){
            return Result.success(true);
        }
        else{
            return  Result.success(false);
        }

    }
大概意思就是拿到这个文章的id,到redis去查这set集合的这个用户是否存在,存在返回true,不存在返回false这样

前端:这个是created的代码

    this.islike=await back(this.id, this.token);
    switch (this.islike) {
      case true:
        this.color="red"
        break;
      case false:
        this.color=""
        break;
    }

this.islike就是后端返回的true or false,如果是true, this.color就是red,如果没有就是无色

redis,就是这样,4就是文章的id,value就是点赞这个文章的用户。

至于拿到点赞数就是另一个接口获取文章值了,这里有article.liked,这里就不赘述了

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值