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算法足以滿足實際生產使用;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM