java实现简单点赞功能

2022-09-03 15:39:46 64 0
魁首哥

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

需求分析

分析:

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

核心问题:

1>怎么区分当python前请求时顶成功操作(第一次顶)还是今天已经顶过(第二次顶)
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 clas恰卡编程网s 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)php;
    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 条评论
64
上一篇:java实现收藏功能 下一篇:Java实现部门员工管理

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码