java redisはユーザーサイン機能を実現します。

4239 ワード

業務の需要はユーザーが毎日一回まで署名することしかできなくて、しかも署名した後にユーザーはポイントを増加して、だからユーザーを毎回署名する時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);//       
        }
        
    }
2:夜明けまであとどれぐらいですか?
    /**
     *                  
     * @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);
    }
3: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);
        }
    }
 
転載先:https://www.cnblogs.com/SHMILYHP/p/10137253.html