目前遇到时钟回拨是直接抛出异常,我知道还有一种方式是两个时间判断相差多少,相差不多就sleep一段时间,现在考虑碰到这种场景直接把当前时间戳设为上一次时间戳处理是否可行,后面的逻辑不变,初步看代码逻辑应该是可行,不会出现重复,副作用只是这个id的时间戳部分与实际生成时间不同。
目前遇到时钟回拨是直接抛出异常,我知道还有一种方式是两个时间判断相差多少,相差不多就sleep一段时间,现在考虑碰到这种场景直接把当前时间戳设为上一次时间戳处理是否可行,后面的逻辑不变,初步看代码逻辑应该是可行,不会出现重复,副作用只是这个id的时间戳部分与实际生成时间不同。
之前看到的一个解决方案是,在【机房id_节点id】处空置出几位,来作为:时钟回拨标识位。
比如空置出3
位,则有2^3-1
7次的回拨容忍。
或者当前节点出现回拨,抛出异常,使调用者去其他节点获取。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
3 回答1.9k 阅读
2 回答773 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.3k 阅读
时间戳设为上一次时间戳, 那上一次时间戳如果有生成过id的话不是重复了. 别人sleep一段时间是能保证不重复的. 你这我觉得不行.