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();}

原文地址:https://www.cnblogs.com/xiao1572662/p/12334922.html

时间: 2024-08-30 11:40:32

0051利用Redis实现业务主键的自增的相关文章

对逻辑主键、业务主键和复合主键的思考

转载的: http://blog.csdn.net/sunrise918/article/details/5575054 这几天对逻辑主键.业务主键和复合主键进行了一些思考,也在网上搜索了一下相关的讨论,相关讨论可以看最下面的参考链接.下面是自己基于 SQL Server 做的一些总结,其他数据库(Oracle.MySQL.DB2.......)应该也类似吧.这个只是自己一时的思考,如有不当请告知,重新思考后再修 正. ? ? 定义(部分定义来源于 SQL Server 联机丛书): 主键(PR

MSSQL - 逻辑主键、业务主键和复合主键

转载自:http://blog.csdn.net/sunrise918/article/details/5575054 这几天对逻辑主键.业务主键和复合主键进行了一些思考,也在网上搜索了一下相关的讨论,相关讨论可以看最下面的参考链接.下面是自己基于 SQL Server 做的一些总结,其他数据库(Oracle.MySQL.DB2.......)应该也类似吧.这个只是自己一时的思考,如有不当请告知,重新思考后再修 正. 定义(部分定义来源于 SQL Server 联机丛书): 主键(PRIMARY

主键、自增主键、主键索引、唯一索引概念区别与性能区别

概念区别: 主键:指字段唯一不为空值的列. 主键索引:指的就是主键,主键没有明确的概念定义,主键既是约束,也是索引,主键是索引的一种,是唯一索引的特殊类型.创建主键的时候,数据库默认会为主键创建一个唯一索引. 自增主键:字段类型为数字.自增.并且是主键. 唯一索引:索引列的值必须唯一,但允许有空值.主键是唯一索引,这样说没错.但反火来说唯一索引也是主键就错误了,因为唯一索引允许空值,主键不允许有空值,所以不能说唯一索引也是主键. 性能区别: 通过测试,发现主键.自增主键.唯一索引的查询效率不一样

MySQL使用on duplicate key update时导致主键不连续自增

使用on duplicate key update语法有时是很方便,但是会有一个影响:默认情况下,每次更新都会更新该表的自增主键ID,如果更新频率很快,会导致主键ID自增的很快,过段时间就超过数字类型的的范围了解决这个问题,有两种方式:(实际目前的方式就是把自增主键ID设置为bigint,也有一部分操作先查询再选择插入OR更新)方法一:拆分成两个动作,先查询,再更新方法二:修改innodb_autoinc_lock_mode参数(不推荐)  innodb_autoinc_lock_mode中有3

主键、自增、唯一键和三大范式

主键.自增.唯一键和三大范式 主键primary key, 加在建表语句中primary key(主键列表),主键对应的字段不允许重复 自增长,在建表语句字段后加auto_increment,这样当对应的字段设置值不给值或给null或直接给默认值时会从表中最大值+1,一个表中只能有一个自增长 唯一键unique key,解决多个字段需要保证唯一性的问题 范式 第一范式:字段中的数据具有原子性,表中数据取出就不用在处理 第二范式:如果有复合主键,某种数据只依赖主键中的某个字段而不是全部主键 (主键

程矢Oracle PowerDesigner中生成Oracle版本主键和自增列

Oracle中如何新建自增列,总的来说需要建立序列,并把这个序列付给某一列,重建触发器即可. 第一步,打开PD,新建一个PDM文档,然后新建一个表,如图所示: 第二步,创建一个序列.在[Model]-[Sequence]打开序列列表窗口,新建一个序列.然后打开序列的属性设置项[physical Options],进行如下设置,点击确定,序列建立完毕. 第三步,将刚刚创建的序列应用到表的主键列中,如图所示:点击确定, 点击确定,至此,自动创建了一个触发器,把序列的值添加到主键中.

2017年2月21日 Oracle数据库,怎么设置表中主键的自增

1.新创建一张表,设置id为主键 例如,创建的表名为:uf_receive_pay 2.设置ID的主键自增,通过Sequence实现 创建Sequence CREATE SEQUENCE uf_receive_pay_Seq     INCREMENT BY 1   -- 每次加几个       START WITH 1     -- 从1开始计数       NOMAXVALUE       -- 不设置最大值       NOCYCLE          -- 一直累加,不循环       

Mycat实战之主键数据库自增方式

创建一个 person表,主键为Id,hash方式分片,主键自增(采用数据库方式) #person表结构如下 Id,主键,Mycat自增主键 name,字符串,16字节最长 school,毕业学校,数字,1-1000范围,是学校编号 age,年龄,18-60 addr,地址,32字节,建议为 gz-tianhe(城市-地区两级 枚举的仿真数据) zcode,邮编, birth,生日,为日期类型, 1980到2010年之间随机的日期 score,得分,0-100分 1. 机器环境 192.168.

cmd中mysql主键id自增,在添加信息时发生错误,再次成功添加时,id已经跳过错误的信息继续自增。

id 自增,在往这个表里添加信息时 发生错误,再次添加 id数值已经跳过之前 原文地址:https://www.cnblogs.com/Zhao159461/p/10764117.html