欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

java redis 实现简单的用户签到功能

时间:2021-05-31 08:26:44|栏目:JAVA代码|点击:

业务需求是用户每天只能签到一次,而且签到后用户增加积分,所以把用户每次签到时放到redis 缓存里面,然后每天凌晨时再清除缓存,大概简单思想是这样的 

直接看代码吧如下 

@Transactional
 @Override
 public void signIn(Integer memberId) throws BizException {
  if(memberId==null){
   throw new BizException(ErrorCode.BIZ_EXCEPTION.getErrcode(), "签到用户id 不能为null");
  }
  String day = DateFormatUtils.format(new Date(), "yyyyMMdd");
  String key = "signin:"+day;
  Boolean sismember = redisClient.sismember(key, memberId.toString());
  if(sismember){
   throw new BizException(ErrorCode.BIZ_EXCEPTION.getErrcode(), "今天已经签到了");
  }else{
   redisClient.sadd(key, memberId.toString());
   redisClient.expire(key, getRefreshTime());
   addPointsRecord(memberId,IntegralType.SIGN_IN);//给用户增加积分
  }
  
 }

获取离凌晨 还有多久

/**
  * 获取当前时间离明天凌晨还有多少小时
  * @return
  */
 public static int getRefreshTime(){
  Calendar calendar = Calendar.getInstance();
  int now = (int) (calendar.getTimeInMillis()/1000);
  calendar.add(Calendar.DATE, 1);
  calendar.set(Calendar.SECOND, 0);
  calendar.set(Calendar.MINUTE, 0);
  calendar.set(Calendar.HOUR_OF_DAY , 0);
  return (int) (calendar.getTimeInMillis()/1000-now);
 }

Controller 

/**
  * 签到
  * @return
  */
 @WeiXinLogin
 @RequestMapping("/signIn")
 public ResponseModel signIn(){
  try {
   Integer memberId = RequestContext.getContext().getUser().getMemberId();
   memberApi.signIn(memberId);
   return new ResponseModel();
  } catch (BizException e) {
   LOGGER.error("signIn error");
   return new ResponseModel(e.getErrcode(), e.getErrm(), null);
  }
 }

上一篇:Java滚动数组计算编辑距离操作示例

栏    目:JAVA代码

下一篇:Spring实战之让Bean获取Spring容器操作示例

本文标题:java redis 实现简单的用户签到功能

本文地址:http://www.codeinn.net/misctech/132671.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有