uuid库,会生成重复的id
uuid库,会生成重复的id uuid.next 是我理解错误吗?
uuid库,会生成重复的id
uuid.next
是我理解错误吗?
有使用的代码吗?
就是demo那么用的,uid = uuid.next()
隔了几个月,生成了一个重复的,登录串号了。
不重复是由服务器启动次数+服务器Id保证的,其中启动次数支持1024次,一周启动一次,能支持20年。服务器id最大支持到4096。单次运行时间单服支持26万玩家注册。你看看这些值有没有溢出。
懂了。
启动次数,没让加了,好像256就启动不了
说错,不是256,估计时本地测试,达到1024次,我重置了,次数,可能是这个问题。
建议启动次数,可以增加一点,本地测试,很快就达到了
这个范围,你可以调整下,适合自己的游戏。后期我准备加个检测,保存并检查两次重启间剩余的递增序列百分比,例如大于80%,时可以利用上次的递增序列,且不增加重启次数
哪里可以改下这个1024,我想改大一点
哪里可以改下这个1024,我想改大一点 这两处,但非uid类的 64bit已经占满了,你估计需要调整下其它的bit https://github.com/sniper00/moon/blob/master/lualib-src/lua_uuid.cpp#L15 https://github.com/sniper00/moon/blob/master/lualib-src/lua_uuid.cpp#L31
两处改成12,不会有其它问题不,先用用。
先用
嗯,你可以把这两个改成12,server_bit 改成 10. 不过你之前生成的id会作废
改了,之后,会生成跟以前一样的uuid吗?是这个意思?
有办法不影响老数据吗?
你是测试环境,还是线上环境?
上线了
测试环境,倒是无所谓。
测试环境,倒是无所谓。
如果是玩家uid倒是有办法处理下,其它的 唯一id 就麻烦了
上线了
线上现在重启次数是多少?
500多,没注意
500多,没注意
可以看下DB 里面具体情况
431次
上线,没注意,直接导入的本地数据。
上线,没注意,直接导入的本地数据。
https://github.com/sniper00/moon/commit/9ef269b272be143dfac760b24a917a085f6d37b5 试试这个修改。
local uuid = require "uuid"
uuid.init(1,1,1,{})
print(uuid.next(0))
print(uuid.next(0))
print(uuid.next(0))
for i=1,100000 do -- 把这个值修改为10000,然后看看 max_percent 的值
uuid.next(0)
end
---服务器正常关闭时把这3个值存库, dump_sequence 为一个table 可以用json存储
local dump_sequence, max_percent, boottimes = uuid.dump()
-- 服务器启动时读取这两个值,并和boottime判断是否需要重用
print("max_percent", max_percent)
if max_percent < 0.3 then -- 30% 以下重用
print("resue boottimes")
uuid.init(1,1,boottimes,dump_sequence)
print(uuid.next(0))
else
print("add boottimes")
uuid.init(1,1,boottimes+1,{})
print(uuid.next(0))
end
你们一周维护一次线上的话,不修改还能坚持10年
嗯,我看看,感谢。