经常能看到有人问“每日从1开始的序列”应该怎么实现这样的问题。实现方法很多,但是最近在看redis,觉得redis很适合处理这样的场景。
假设一个场景:从一个“序列”中获取数字,要求每天都从0开始,并且用“0”补到4位数。比如,第123号输出为0123 。
具体实现代码
package myTest.redisTest;
import java.util.Calendar;
import redis.clients.jedis.Jedis;
public class TestRedis_seq {
private static final Jedis jd = new Jedis("localhost", 6379);
public static void main(String[] args) {
// TODO Auto-generated method stub
String key = "time_seq_1";
System.out.println(querySeq(key));
}
public static String querySeq(String key) {
if(!jd.exists(key)) {
jd.set(key, "0");
Calendar cal = Calendar.getInstance();
//jd.expire(key, (60 - cal.get(Calendar.SECOND))); //,一分钟为周期,方便测试
jd.expire(key, (86400 - cal.get(Calendar.SECOND)
- cal.get(Calendar.MINUTE) * 60
- cal.get(Calendar.HOUR_OF_DAY) * 60 * 60));
}
return String.format("%04d", jd.incr(key) % 10000);
}
}
简单来说,就是利用了redis自带的失效时间特性,使得代码比其他方法要简洁不少。
如果想“新建”另一条“序列”,只需更改String key = "time_seq_1";
的值。
以上。