用在哪 : 要给一个东西设置有效时间 , 到第二天0点过期失效 , 用Redis
项目组要求整齐就好 , 没有指定怎么弄 , 我就弄成"项目名 + key名 + yyyy-MM-dd + 唯一标识"
这里其他部分略,
本篇只讲两点
①yyyy-MM-dd怎么弄出来插进Redis的key里
②怎么设置第二天过期
************************************************************************
①yyyy-MM-dd怎么弄出来插进Redis的key里
步骤1/3 因为是要插在Redis里弄成String格式 , 格式按你自己喜好
// 时间对象格式化为字符串
// 用来做今日访问量
public static String getyyMMdd(){
long currentTime = System.currentTimeMillis(); // 当前时间戳
Date date = new Date(currentTime);// 时间戳转换为时间
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
return simpleDateFormat.format(date);
}
步骤2/3 用你自己拼接RedisKey的方法拼上去就好了 , 比如这样
public String linkKey(String... linkContents){
StringBuilder sb = new StringBuilder(100);
sb.append(prefix);
for (String linkContent : linkContents) {
sb.append(":").append(linkContent);
}
return sb.toString();
}
步骤3/3 拼接Key
→用指定好的枚举钥,比如我是HolaOrange,我就弄一个这样的,key就好了
String key = RedisKey.IAMORANGE.linkContent(日期,唯一标识);
// 日期怎么弄看下面
②怎么设置第二天过期
步骤1/3 先算出现在距离过期还有多久
直接用Calender搞,
我看别人也有这么写的, 直接写1天哈哈,这里精度我没研究直接摆long,查完我会回来填坑的(bushi
写完了摆工具类里
// 今天剩余时间
public static long todayHaveTime(){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, 0); // 0天
cal.set(Calendar.HOUR_OF_DAY, 23);// 23小时
cal.set(Calendar.MINUTE, 59); // 59分
cal.set(Calendar.SECOND, 59); // 59秒
cal.set(Calendar.MILLISECOND, 999); // 999ms 因为1s=1000ms
return (long) ((cal.getTimeInMillis() - System.currentTimeMillis()) / 60000.00);
// 这里是为了Redis在设置时候弄的第三个参数,单位是分钟,
// 所以我算出来除以1000ms变成秒单位,
// 再除以60就是以分钟为单位了
}
步骤2/3 什么时候调用这个方法:
//API一目了然而且项目是SpringBoot项目所以用的这
@Autowired
private StringRedisTemplate template;
...中间代码略
template.opsForValue().set(key,value,插在这第三个参数这,TimeUnit.SECONDS);
// 看到了吗第四个参数单位是秒,所以中间的第三个参数单位一定要是秒,
// 如果第四个参数是其他单位,第三个的值就随之改就好了
步骤3/3 插在代码哪里
比如用户买了一张票, 成功交易的那一刻 , 把东西存入Redis ,
实体按格式造key , 拿到value, 然后把倒计时插入第三个参数,确定好单位(第四个参数) , 存入Redis以后就开始倒计时了