zoukankan      html  css  js  c++  java
  • 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);//给用户增加积分
            }
            
        }

    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);
            }
        }
  • 相关阅读:
    【原】文本图片自适应高度小bug以及解决办法
    【原】iOS学习39网络之数据请求
    【原】iOS学习38网络之数据解析
    iOS数据持久化文件读写之偏好设置
    SQLite错误码
    iOS开发代码规范(通用)
    iOS学习37数据处理之CoreData
    iOS中的单例
    iOS学习36数据处理之SQLite数据库
    UIImage两种初始化的区别
  • 原文地址:https://www.cnblogs.com/SHMILYHP/p/10137253.html
Copyright © 2011-2022 走看看