redis,高并发下签到

场景:一个店铺一天只能签到一次

知识储备:redis set结构。

  • sadd:添加    网址:http://www.runoob.com/redis/sets-sadd.html
  • sismember :判断是否存在当前key 网址:http://www.runoob.com/redis/sets-sismember.html
  • expireat :设置过期时间 网址:http://www.runoob.com/redis/keys-expireat.html
  • unix:https://baike.baidu.com/item/unix%E6%97%B6%E9%97%B4%E6%88%B3/2078227?fr=aladdin

实现:

//签到key id为店铺id
String key  = "checkin:"+id;
		
//判断今天是否已经签到过
if(jedis.sismember(key, user.getId())){
    //已签到 返回
}else{
    //todo 保存数据到数据库
        
    jedis.sadd(key, user.getId());
    //设置过期时间到今天24点
    jedis.expireAt(key, todayLastDate()/1000);
}

 //获得当天24点毫秒时间函数
protected long todayLastDate() {
 Calendar calendar = Calendar.getInstance();
 calendar.set(Calendar.HOUR_OF_DAY, 23);
 calendar.set(Calendar.MINUTE, 59);
 calendar.set(Calendar.SECOND, 59);
 calendar.set(Calendar.MILLISECOND, 999);
 return calendar.getTime().getTime();
}
		

 

你可能感兴趣的:(redis)