java实现简单点赞功能

本文实例为大家分享了java实现简单点赞功能的具体代码,供大家参考,具体内容如下

需求分析

分析:

1.必须先登录,否则提示
2.第一次点赞(顶),点赞操作,点赞数+1,提示顶成功
3.第二次点赞(顶),没有操作,提示今天顶过了

核心问题:

1>怎么区分当前请求时顶成功操作(第一次顶)还是今天已经顶过(第二次顶)
2>怎么考虑今天已顶过 
----------------------------------------------
核心问题需要区分是第一次顶还是的二次顶,这种请求操作属于有状态请求操作,需要后端设计一个记号,这个记号注意需要设置时效性(今天最后一秒到当前时间间隔[单位是秒])

//如何设计记号?
方案1:可以参照之前攻略收藏记号操作方式,设计一个key,用户uid做区分(保证唯一),value值是攻略id集合,一顶将攻略uid添加集合中
方案2:设计一个key,使用用户uid跟攻略sid进行区分,value值随意,需要设置有效性

实现步骤

1.创建一个点赞接口,传入当前点赞攻略sid,获取当前登录用户uid
2.通过sid跟uid拼接记号的key
3.判断key是否存在
    如果存在,说明今天已经点赞(顶)过,不做任何处理,页面提示
    如果不存在,说明具体没点赞(顶)过,获取vo对象,点赞数属性+1,将记号缓存到redis中,
    设置过期时间:今天最后一秒到当前时间间隔[单位是秒]
4.更新vo对象

具体实现

//判断是否顶过
    @Override
    public boolean strategyThumbup(String id, String sid) {
        String key = RedisKeys.USER_STRATEGY_THUMBUP.join(id, sid);
        //如果不包含,表示没有顶过,执行点赞,点赞数+1,并设置key有效时间
        if (!template.hasKey(key)) {
            StrategyStatisVO statisVO = this.getStrategyStatisVO(sid);
            statisVO.setThumbsupnum(statisVO.getThumbsupnum() + 1);
            this.setStrategyStatisVO(statisVO);
            //拿到最晚时间
            Date endDate = DateUtil.getEndDate(new Date());
            //计算时间间隔
            long time = DateUtil.getDateBetween(endDate, new Date());
            //设置有效时间
            template.opsForValue().set(key, "1", time, TimeUnit.SECONDS);
            return true;
        }
        return false;
    }
    -----------------------------------------------------------------------------------
    //时间工具类
    public class DateUtil {
    /**
     * 获取两个时间的间隔(秒) 
     */
    public static long getDateBetween(Date d1, Date d2){
        return Math.abs((d1.getTime()-d2.getTime())/1000);//取绝对值
    }
    public static Date getEndDate(Date date) {
        if (date == null) {
            return null;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY,23);
        c.set(Calendar.MINUTE,59);
        c.set(Calendar.SECOND,59);
        return c.getTime();
    }
}

小结

1.核心问题需要区分是第一次顶还是的二次顶,这种请求操作属于有状态请求操作
2.有状态请求操作我们需要设置记号,问题的关键在于记号的设计
3.这个记号,我们也可以使用与点赞/收藏功能类似的记号,就是以用户id为key,然后将顶的文章id放到集合中为value
4.但是更推荐使用以用户id和攻略id拼接而成的为key,value随意取
5.我们操作时只需要判断key是否存在,存在,我们什么操作也不用做,不存在,我们就将点赞(数)+1,然后设置key的时间即可
6.最后更新vo对象
7.难点在于时间的设置,看工具类,这个key键设置体现了key键的唯一性,灵活性和时效性

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java用Cookie限制点赞次数(简版)

    本文简单利用Cookie技术来简单的限制点赞次数,并不能杜绝游客的恶意点赞. 好了,不啰嗦了,先来看看基础知识: ajax+springMVC+cookie 中间框架你随意,楼主这里用了springMVC,只要取得HttpServletRequest和HttpServletResponse你就可以操作cookie啦 什么是Cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 来创建和取回

  • java实现点赞功能

    本文实例为大家分享了java实现点赞功能的具体代码,供大家参考,具体内容如下 实现思路: 将点赞的数据先保存到redis中,然后定时同步到数据库 第一步: 在redis中创建二个hash 用于存储 用户点赞记录及记录点赞数MAP_USER_LIKED :用户点赞的记录 key:记录id::用户id value:1MAP_USER_LIKED_COUNT:记录点赞数 key: 记录id value:数量 第二步: 创建枚举类 @Getter public enum LikeStatusEnum {

  • Java刷视频浏览量点赞量的实现代码

    说明 这几天班主任一直让我们访问一个网页来观察看视频,增加访问次数.每个班级还有指定的名额...而且经过我的测试,点赞次数是在观看视频一会才出现的.. 可是身为计算机专业的 肯定不想一直点啊 点啊 于是我就有了一个大胆的想法 分析 于是我就查看网页的源代码 这行代码是弹出点赞的时间为18s. 18秒后发生了什么呢 ?继续看 可以看到这个弹出点赞的父div为class="video_mask" 而且默认的显示框类型为none,即不显示. 好吧 废话不多说. 主要看下面的 如果我们点击了t

  • 非常全面的Java SpringBoot点赞功能实现

    目录 前言 解决方案 青铜版 白银版 黄金版 源码 总结 前言 最近公司在做一个NFT商城的项目,大致就是一个只买卖数字产品的平台,项目中有个需求是用户可以给商品点赞,还需要获取商品的点赞总数,类似下图 起初感觉这功能很好实现,无非就是加个点赞表嘛,后来发现事情并没有这么简单. 一开始的设计是这样的,一共有三张表:商品表.用户表.点赞表,用户点赞的时候把用户id和商品id加到点赞表中,并给对应的商品点赞数+1.看起来没什么问题,逻辑也比较简单,但是测试的时候缺发现了奇怪的bug,点赞数量有时候会

  • java实现简单点赞功能

    本文实例为大家分享了java实现简单点赞功能的具体代码,供大家参考,具体内容如下 需求分析 分析: 1.必须先登录,否则提示2.第一次点赞(顶),点赞操作,点赞数+1,提示顶成功3.第二次点赞(顶),没有操作,提示今天顶过了 核心问题: 1>怎么区分当前请求时顶成功操作(第一次顶)还是今天已经顶过(第二次顶)2>怎么考虑今天已顶过 ----------------------------------------------核心问题需要区分是第一次顶还是的二次顶,这种请求操作属于有状态请求操作,

  • Java实现简单抽奖功能界面

    本文实例为大家分享了Java实现简单抽奖功能的具体代码,供大家参考,具体内容如下 要求:定义文本框添加姓名,将姓名存储并且在界面中可见,点击抽奖按钮进行抽奖并输出最后的中奖得主. 关于抽奖当然需要用到随机数的生成函数,在Java中Random 的使用合适比较简单的: 有两种不同的Random方法的使用,其中一种是Math中的random. 该方法生成的是0-1之间的浮点数,如果要生成整数类型的数字,可以乘一个整数,强制转换为整数类型. int n = (int)(Math.random()*x)

  • 用Java实现简单计算器功能

    本项目为大家分享了Java实现简单计算器功能的具体代码,供大家参考,具体内容如下 一 项目说明 实训目的:掌握 Java GUI 开发中的布局管理和事件处理机制. 实训要求: (1)要使用 java 的 GUI 设计出计算器界面. (2)通过界面按钮,可以实现整数或浮点数的四则运算,并能将结果显示在界面中. (3)计算可以有小数点,和正负整数的计算. (4)要有清零功能. 二.类设计 中缀表达式的计算solution(String str) 用来中算后缀表达式的值,并将结果返回.准备一个数字栈,

  • java制作简单验证码功能

    本文实例为大家分享了java制作简单验证码的具体代码,供大家参考,具体内容如下 在这里我们需要用到java的画笔工具,所以我们需要导入以下包 import="java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*" 然后我就使用java脚本来实现一个小小的验证码 <%@ page contentType="image/jpeg; charset=utf-8" language="java&quo

  • java实现简单发送邮件功能

    本文实例为大家分享了java实现简单发送邮件的具体代码,供大家参考,具体内容如下 添加依赖 <!--发送邮件API-->     <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->     <dependency>       <groupId>javax.mail</groupId>       <artifactId>javax.mail-ap

  • java实现简单计算器功能

    使用java来实现一个简单的计算器,供大家参考,具体内容如下 最近使用java制作了一个计算器,菜单栏里的功能没有实现,只是写一个版式,仅仅实现了计算功能 ,如果想要实现菜单栏功能可自行在该代码的基础上去实现. 话不多说直接上代码 package test; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public

  • 用Java实现简单画板功能

    现在,我们来讲一下怎么用Java来实现简单画板,要实现的功能有:选择图形(方形.圆形.多边形...).可以选择颜色. 首先,打开windows下的画图软件,我们知道我们需要一个窗体(JFrame):我们要画画,需要画板:我们要选择图形.颜色,所以还应用到按钮组件,说到这里,我们所需要的原料基本完成了.接下来,我们要考虑布局:我们采用最简单的布局,窗体的最上面放选择图形的按钮,中间是画板,最下面是选择颜色的按钮.就是这样的: 我们把图形按钮.颜色按钮安排在两个面板上,画板为一个单独的面板,对于布局

  • Java编程实现游戏中的简单碰撞检测功能示例

    本文实例讲述了Java编程中的简单碰撞检测功能.分享给大家供大家参考,具体如下: 今天在家正在写一个坦克大战的小游戏来玩,遇到了一个简单的圆和圆的碰撞检测的小问题, 碰撞检测的过程处理主要有以下三步: 1.碰撞检测(Collision Detection):返回两个或多个物体是否发生碰撞的布尔判断. 2.碰撞确定(Collision Determination):找到物体之间实际相交位置. 3.碰撞响应(Collision Response):针对两个物体之间的碰撞决定采取何种操作. 下面是关于

  • java实现简单解析XML文件功能示例

    本文实例讲述了java实现简单解析XML文件功能.分享给大家供大家参考,具体如下: package demo; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException;

随机推荐