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 实现用户签到功能的资料请关注其它相关文章!