工作中经常需要生成按照顺序的唯一的code,这种数据往往跟日期大小等有关,但是又不能把它们设置为主键,这样就会导致新增的时候可能会并发重复,例如 我要生成一个code为 PO-20191012-1133 这样的一个按照顺序来的code(标识-日期-自增),这样就要我们在代码层生成code然后保存到数据库,java中并发不高的时候我们可以通过查询数据库中的code,获取当前最新code然后通过Atomic来创建新的code,这种一定程度上可以减少错误的发生,但是很显然,查询数据库的过程是有时间的,这个时间并发就可能会出错,所以我们用redis来代替查询数据库,redis查询时间短,且是单线程的,这样就能保证各个线程获得的自增id是对的,在这里我就提供一下思路
1 生成每天或者每月唯一的redis key (保证前缀唯一) 例如PO-20191012
2 按照redis key 通过incr生成自增id 这个就类似于Atomic自增了,不过Atomic,每次发版会重置,然后就可以拼接出code了;
3 过期删除,生成了key时间过了就应该删除,那删除的时间怎么找呢 ,我们可以在自增为1的时候删除上一周期的键这样比较稳
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务