redis实现连续自增key

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis实现连续自增key相关的知识,希望对你有一定的参考价值。

参考技术A Redis Incr 命令将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。

java使用lua语法实现自增并设置有效时间:

0051利用Redis实现业务主键的自增

需求描述:自增主键的格式为 业务序列+当前日期+从00001开始自增

 

//redis实现按业务+日期+自增

//输出结果为:biz2020021800001biz2020021800002biz2020021800003的形式
@Test
public void testJedis(){
    SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
    Date date=new Date();
    String formatDate=sdf.format(date);
    //业务编码+日期做为rediskey
   
String key = "biz" + formatDate;

 //关键是使用RedisAtomicLong类来实现,能够保证原子性

    RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
    //取出redis中存放的值,从1开始自增
   
Long increment = entityIdCounter.incrementAndGet();
    //将值转换为指定位数
   
DecimalFormat df=new DecimalFormat("00000");//五位序列号
   
String value = df.format(increment);
    //键与值拼接做为自增主键
   
System.out.println(key + value);
    }

以上是单线程的情况进行测试,也可以通过下面多线程的方式进行测试

public void testMoreThread()throws Exception{
ExecutorService executorService = Executors.newFixedThreadPool(100);
for(int i=1;i<=1000;i++){
executorService.execute(new Runnable() {
@Override
public void run() {
System.out.println("当前线程为:" + Thread.currentThread().getName());
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
Date date=new Date();
String formatDate=sdf.format(date);
//业务编码+日期做为redis的key
String key = "biz" + formatDate;
RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
//取出redis中存放的值,从1开始自增
Long increment = entityIdCounter.incrementAndGet();
//将值转换为指定位数
DecimalFormat df=new DecimalFormat("00000");//五位序列号
String value = df.format(increment);
//键与值拼接做为自增主键
System.out.println("业务主键为:"+key + value);
}
});
}
//一定要有这两行代码,否则上边的for循环中的线程还没有执行完,线程池就关闭了,然后就会报错连接不上redis
Thread.sleep(5000); //模拟等待执行结束
executorService.shutdown();
}

 

以上是关于redis实现连续自增key的主要内容,如果未能解决你的问题,请参考以下文章

Redis高级数据结构实战(一)BitMap用户连续签到

MySQL自增id不连续问题

自增主键为什么会不连续

Day903.自增主键不能保证连续递增 -MySQL实战

SQL Server查询时添加一列连续的自增列

被问懵了:MySQL 自增主键一定是连续的吗?