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 實現用戶簽到功能的資料請關注好吧啦網其它相關文章!
相關文章:
1. css代碼優化的12個技巧2. .NET SkiaSharp 生成二維碼驗證碼及指定區域截取方法實現3. MyBatis JdbcType 與Oracle、MySql數據類型對應關系說明4. 在JSP中使用formatNumber控制要顯示的小數位數方法5. ASP中if語句、select 、while循環的使用方法6. jsp網頁實現貪吃蛇小游戲7. CentOS郵件服務器搭建系列—— POP / IMAP 服務器的構建( Dovecot )8. ASP中實現字符部位類似.NET里String對象的PadLeft和PadRight函數9. 存儲于xml中需要的HTML轉義代碼10. 利用CSS制作3D動畫
