Guid全局唯一性算法

下面以Lua为例实现guid的生成,再对比nginx服务器的MD5算法进行比对效率

function
guid() local seed = { '0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j', 'k','l','m','n','o','p','q','r','s','t', 'u','v','w','x','y','z' } local sid = "" for i=1, 32 do sid = sid .. seed[math.random(1,36)] end return string.format('%s-%s-%s-%s-%s', string.sub(sid, 1, 8), string.sub(sid, 9, 12), string.sub(sid, 13, 16), string.sub(sid, 17, 20), string.sub(sid, 21, 32) ) end local s = 0 local start = socket.gettime() while s < 100000 do s=s+1 --ngx.print(ngx.md5(math.random(1,36)) .. '\r\n')
ngx.print(guid() .. '\r\n')
end ngx.print("execute time:" .. socket.gettime()-start .. '\r\n') ngx.exit(200)

上面guid方法中seed读者可以自己自行扩展,比如再加入'A-Z'大写字符,guid我以32位的字符进行输出,

在实际测试过程中, 10万级的数据生成速度不考虑写文件的IO时间,远远低于0.4秒,而同等数量使用ngx.md5()时则足足多了一倍的时间;

再从唯一性上进行分析,10万级的生成串中,测试了10次,没有发现任何一次有重复的字符串,说明自配的guid算法足以满足实际生产使用;

posted @ 2016-08-24 11:07  foundwant  阅读(4244)  评论(0编辑  收藏  举报