生成一个唯一的16个字符的密钥,用作批处理名称,不需要任何类型的存储(例如一个唯一的计数器)。
我的Windows服务每隔30秒运行 。我从MQ中获取消息并批量处理它们。我正在进行的一项服务调用现在需要一个16个字符的批处理名称。 他们不关心批处理名称是什么,它只需要在所有批次中都是唯一的。
如果我生成Guid
,我可以使用该字符串的第一个或最后16个字符,但它仍然是我需要的唯一字符吗?
答案 0 :(得分:6)
没有
Raymond Chen在GUIDs are globally unique, but substrings of GUIDs aren't中详细解释了原因。
但是,如果您在一台计算机上运行此功能,那么您不需要您的ID 全局唯一 - 仅仅是本地唯一的。因此,您可以从他描述的GUID算法中删除MAC地址要求。此外,如果您知道每30秒只生成一个,则可以删除算法的碰撞部分。这几乎让你使用日期时间,如qujck建议的那样。
答案 1 :(得分:3)
不是简单的答案。为什么不使用日期/时间?
例如,这里有一些Oracle生成的GUID
D71CDF38BB3B6026E0430A9A9A286026
D71CDF38BB3C6026E0430A9A9A286026
D71CDF38BB3D6026E0430A9A9A286026
D71CDF38BB3E6026E0430A9A9A286026
D71CDF38BB3F6026E0430A9A9A286026
D71CDF38BB406026E0430A9A9A286026