java redis 實(shí)現(xiàn)簡單的用戶簽到功能
業(yè)務(wù)需求是用戶每天只能簽到一次,而且簽到后用戶增加積分,所以把用戶每次簽到時放到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(), "今天已經(jīng)簽到了");
}else{
redisClient.sadd(key, memberId.toString());
redisClient.expire(key, getRefreshTime());
addPointsRecord(memberId,IntegralType.SIGN_IN);//給用戶增加積分
}
}
獲取離凌晨 還有多久
/**
* 獲取當(dāng)前時間離明天凌晨還有多少小時
* @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)簡單的用戶簽到功能的詳細(xì)內(nèi)容,更多關(guān)于Java 實(shí)現(xiàn)用戶簽到功能的資料請關(guān)注腳本之家其它相關(guān)文章!
- Redis應(yīng)用之簽到的使用
- SpringBoot+Redis?BitMap實(shí)現(xiàn)簽到與統(tǒng)計(jì)的項(xiàng)目實(shí)踐
- PHP利用redis位圖實(shí)現(xià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)文章
SpringBoot如何處理@KafkaListener消息
Spring通過KafkaMessageListenerContainer、ConcurrentMessageListenerContainer等組件實(shí)現(xiàn)Kafka消息的監(jiān)聽和處理,并通過@KafkaListener注解將業(yè)務(wù)邏輯與Kafka消費(fèi)者連接起來,Spring?Boot自動配置Kafka相關(guān)組件,簡化了Kafka的使用2024-12-12
詳解如何將Spring Boot應(yīng)用跑在Docker容器中
這篇文章主要介紹了詳解如何將Spring Boot應(yīng)用跑在Docker容器中,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Mybatis配置映射文件中parameterType的用法講解
這篇文章主要介紹了Mybatis配置映射文件中parameterType的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Java使用Request獲取請求參數(shù)的通用方式詳解
這篇文章主要給大家介紹了關(guān)于Java使用Request獲取請求參數(shù)的通用方式,在Java后端開發(fā)中第一步就是獲取前端傳過來的請求參數(shù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
Spring MVC請求參數(shù)接收的全面總結(jié)教程
這篇文章主要給大家總結(jié)介紹了關(guān)于Spring MVC請求參數(shù)接收的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
Jsoup解析html實(shí)現(xiàn)招聘信息查詢功能
這篇文章主要為大家詳細(xì)介紹了Jsoup解析html實(shí)現(xiàn)招聘信息查詢功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04

