如何用Java和Redis实现一个基础的签到系统功能?

2026-04-30 13:252阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计458个文字,预计阅读时间需要2分钟。

如何用Java和Redis实现一个基础的签到系统功能?

业务需求是用户每天只能签到一次,签到后用户积分增加,因此将用户每次签到时的时间存放到Redis缓存中。每天凌晨时清除缓存。大致思路如下:

python@Tradef sign_in(user_id): if not user_signed_in_today(user_id): increment_user_score(user_id) save_sign_in_time_to_redis(user_id) else: pass

def user_signed_in_today(user_id): return redis.exists(fsigned_in_{user_id})

def increment_user_score(user_id): user_score=get_user_score(user_id) new_score=user_score + 1 set_user_score(user_id, new_score)

def save_sign_in_time_to_redis(user_id): redis.set(fsigned_in_{user_id}, time.time())

def clear_cache_at_midnight(): for user_id in all_user_ids(): redis.delete(fsigned_in_{user_id})

如何用Java和Redis实现一个基础的签到系统功能?

业务需求是用户每天只能签到一次,而且签到后用户增加积分,所以把用户每次签到时放到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 实现用户签到功能的资料请关注易盾网络其它相关文章!

本文共计458个文字,预计阅读时间需要2分钟。

如何用Java和Redis实现一个基础的签到系统功能?

业务需求是用户每天只能签到一次,签到后用户积分增加,因此将用户每次签到时的时间存放到Redis缓存中。每天凌晨时清除缓存。大致思路如下:

python@Tradef sign_in(user_id): if not user_signed_in_today(user_id): increment_user_score(user_id) save_sign_in_time_to_redis(user_id) else: pass

def user_signed_in_today(user_id): return redis.exists(fsigned_in_{user_id})

def increment_user_score(user_id): user_score=get_user_score(user_id) new_score=user_score + 1 set_user_score(user_id, new_score)

def save_sign_in_time_to_redis(user_id): redis.set(fsigned_in_{user_id}, time.time())

def clear_cache_at_midnight(): for user_id in all_user_ids(): redis.delete(fsigned_in_{user_id})

如何用Java和Redis实现一个基础的签到系统功能?

业务需求是用户每天只能签到一次,而且签到后用户增加积分,所以把用户每次签到时放到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 实现用户签到功能的资料请关注易盾网络其它相关文章!