我只是碰到Lua環境中的Redis的一個有趣的現象來 - 使用Redis的作爲時間戳甲骨文 - 這樣的:Redis的Lua中的Math.random
...
local time = redis.call('TIME')
local millis = (tonumber(time[1]) * 1000) + math.floor(tonumber(time[2])/1000)
local version = string.format("%.0f",mills) .. string.format("%05d", math.random(99999))
現在version
是這樣的:145209287564117083
包括時間戳,並在年底五個隨機數字的 - 至少這就是我的想法。
實際發生的是什麼,是在年底(由math.random(99999)
產生五個隨機數字不是隨機的,而是始終數字17083
,無論多麼頻繁執行腳本。
對我來說,這是不是什麼大不了的(因爲我可以追加腳本返回後的隨機數字),但我沒想到這個行爲,因此需要相當長的一段時間才能找到我的錯誤。
我希望這個信息可以節省一些時間。
嘗試'''math.randomseed(os.time())'''在腳本的頂部。 – warspyking
@warspyking - 將不起作用,這是因爲Redis Lua沙箱沒有'os' lib,並且在任何情況下,Redis的math.random被設計爲在使用基於腳本的複製時產生相同的值v3.2之前的唯一模式) –
@Itamar嗯,它確實可以是任何不斷變化的東西。不一定是'''os.time'''。 – warspyking