请问在生成自增编码的时候如何处理并发的问题

2020-02-15 16:41:48 +08:00
 gibber

需求: 1.新增商品信息,根据选择的商品类别生成唯一的商品编码,编码的规则是类别编码加 4 位自增编码,如在 001 分类下增加商品,商品编码就是 0010001,0010002...,每个类别最多存放 9999 个商品 2.在新增页面选择类别后就要生成编码显示在页面上,同一类别下一次可以新增多个商品

请问该如何生成后面的 4 位自增编码才能避免并发操作时候的重复问题?

1722 次点击
所在节点    程序员
6 条回复
ggabc
2020-02-15 16:48:54 +08:00
共享 redis 锁,每次生成新码时候锁一下
gibber
2020-02-15 17:16:01 +08:00
@ggabc 意思是生成新码后在 redis 里面加个锁,等保存成功后再删除锁?
yuanwang33
2020-02-15 17:53:15 +08:00
如果使用 redis,可以考虑使用 INCR 特性,将商品编码作为 key 的元素。
参考文档: https://redis.io/commands/INCR
gibber
2020-02-15 18:21:31 +08:00
@yuanwang33
是考虑过用 incr,用分类的编码做 key,自增码做值,每次 incr 后拼接成商品编码.
但这样遇到个问题,就是编码是在选择分类的时候生成,最后并不一定会保存到数据库,如果用户取消操作或者切换分类那已经生成的码就无法再继续使用了
gibber
2020-02-16 08:26:53 +08:00
通常的做法是怎样的呢?
yuanwang33
2020-02-16 14:14:56 +08:00
不太清楚你们大的需求,建议设计两个 ID,内部系统使用和外部展示,对内连续单调递增的在写入数据库前生成,对外的不连续(避免外部推算数量)的展示到前台给用户。
根据你描述的内容,单个 ID 如果严格要求单调递增,所有的用户串行操作才能实现。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/644817

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX