Redis实现点赞功能

点赞功能介绍:

点赞功能在我们日常的软件使用中用的非常多,我们每个人只能为某个评论点赞一次,再点击时就会取消点赞,点赞数也就会随之减一

设计思路:

一: 判断该登录用户是否点过赞
我们需要在判断的对象中加入相应的属性(isLiked) Boolean类型 如果为true就表示已经点赞,如果为false就表示没有点赞
在Redis中进行Key-Value的查询,查到了就把isLiked置为true,没有查到就置为false。让前端更方便的去展示给用户。
        //先获取用户的id
        UserDTO user = UserHolder.getUser();
        Long userId = user.getId();
        //获取Blog的id
        Long id = blog.getId();
        //判断用户是否点过赞
        String key = "Blog:liked:"+id;
        Boolean Liked = stringRedisTemplate.opsForSet().isMember(key, userId);
        //此时表示已经点过赞
        blog.setIsLiked(BooleanUtil.isTrue(Liked));
二:根据点赞的情况判断点赞是+1 or -1
(1)没点过赞就能够让该用户点赞,并且点赞数加一,并且将点赞的用户信息存储到Redis中,用来对后续是否点赞的判断。
Redis的数据类型选择的是set 它的特点就是元素不可重复,如果要考虑点赞的先后顺序的话我们可以选择用zset
注释:
存储Redis的Key为"Blog:liked:" + 所对应评论的id
value为点赞用户的userId
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    @Override
    public Result liked(Long id) {
        //先获取用户的id
        UserDTO user = UserHolder.getUser();
        Long userId = user.getId();
        //判断用户是否点过赞
        String key = "Blog:liked:"+id;
        Boolean isLiked = stringRedisTemplate.opsForSet().isMember(key, userId);
        if(BooleanUtil.isFalse(isLiked)){
            //如果未点赞可以点赞
            boolean isSuccess = update().setSql("liked = liked +1").eq("id", id).update();
            if(isSuccess){
                //成功,将用户加入redis
                stringRedisTemplate.opsForSet().add(key,userId.toString());
            }

: (2)点过赞如果还要点赞,就让点赞数减一,并且将Redis中对应的用户信息进行清除。

else{
            //已点赞就取消之前的点赞
            boolean isSuccess = update().setSql("liked = liked -1").eq("id", id).update();
            if (isSuccess) {
                stringRedisTemplate.opsForSet().remove(key,userId.toString());
            }
        }
        return Result.ok();
    }
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱敲键盘的程序源

你的激励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值