java redis 實(shí)現(xiàn)簡(jiǎn)單的用戶簽到功能
業(yè)務(wù)需求是用戶每天只能簽到一次,而且簽到后用戶增加積分,所以把用戶每次簽到時(shí)放到redis 緩存里面,然后每天凌晨時(shí)再清除緩存,大概簡(jiǎn)單思想是這樣的
直接看代碼吧如下
@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(), "今天已經(jīng)簽到了");
}else{
redisClient.sadd(key, memberId.toString());
redisClient.expire(key, getRefreshTime());
addPointsRecord(memberId,IntegralType.SIGN_IN);//給用戶增加積分
}
}
獲取離凌晨 還有多久
/**
* 獲取當(dāng)前時(shí)間離明天凌晨還有多少小時(shí)
* @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 實(shí)現(xiàn)簡(jiǎn)單的用戶簽到功能的詳細(xì)內(nèi)容,更多關(guān)于Java 實(shí)現(xiàn)用戶簽到功能的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Redis應(yīng)用之簽到的使用
- SpringBoot+Redis?BitMap實(shí)現(xiàn)簽到與統(tǒng)計(jì)的項(xiàng)目實(shí)踐
- PHP利用redis位圖實(shí)現(xiàn)簡(jiǎn)單的簽到功能
- 微服務(wù)?Spring?Boot?整合?Redis?BitMap?實(shí)現(xiàn)?簽到與統(tǒng)計(jì)功能
- Redis基于Bitmap實(shí)現(xiàn)用戶簽到功能
- 基于Redis位圖實(shí)現(xiàn)用戶簽到功能
- PHP使用redis位圖bitMap 實(shí)現(xiàn)簽到功能
- Redis實(shí)現(xiàn)每日簽到功能(大數(shù)據(jù)量)
相關(guān)文章
Java中的ArrayList和contains函數(shù)和擴(kuò)容機(jī)制(源碼詳解)
這篇文章主要介紹了Java中的ArrayList和contains函數(shù)和擴(kuò)容機(jī)制,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-10-10
Spring Data Jpa實(shí)現(xiàn)自定義repository轉(zhuǎn)DTO
這篇文章主要介紹了Spring Data Jpa實(shí)現(xiàn)自定義repository轉(zhuǎn)DTO,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Java基礎(chǔ)之finally語(yǔ)句與return語(yǔ)句詳解
這篇文章主要介紹了Java基礎(chǔ)之finally語(yǔ)句與return語(yǔ)句詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
Java修改eclipse中web項(xiàng)目的server部署路徑問(wèn)題
這篇文章主要介紹了Java修改eclipse中web項(xiàng)目的server部署路徑,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11

