欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-23 18:36:38
业务需求是用户每天只能签到一次,而且签到后用户增加积分,所以把用户每次签到时放到redis 缓存里面,然后每天凌晨时再清除缓存,大概简单思想是这样的直接看代码吧如下@transactional @ov...

业务需求是用户每天只能签到一次,而且签到后用户增加积分,所以把用户每次签到时放到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 redis 实现简单的用户签到功能的详细内容,更多关于java 实现用户签到功能的资料请关注其它相关文章!

相关标签: Java 签到 redis