lua随机数方案

最近在做nginx+lua的加密验证,把一些记录信息打印到nginx的error日志中。为了关联起每次的http请求,所以需要做一个标识。后续在查日志的时候,可以知道哪些日志是同一次的请求。后来想到使用随机数来实现。

实现方案

在每次请求的开始,随机生成一个1到1000000之间的数字,然后写日志的时候,把这个数字打印到日志的开始。这样拥有相同数字的即是同一次请求。(因为随机数的生成可能会生成相同的,所以可能会有不同的请求共用相同的随机数标识。不过这个对于目前的请求来说不会有太大的问题。)

lua的随机数生成需要一个种子数,可以使用时间戳来做种子数。相同的种子数生成的随机数是相同的。

随机数方案1

使用os.time()获取随机数。

#!/usr/bin/env lua

math.randomseed(os.time()) 
math.random(1,100)

方案优点

不用安装额外的模块,可以直接使用。

方案缺点

os.time()生成的时间戳是基于秒的,请求中,每秒会有多次的请求。因为在同一秒访问,所以这些请求的随机数都会相同。

随机数方案2

luasocket需要安装。luasocket安装的教程:点击

因为luasocket可以获取到毫秒的时间戳,更精确的随机数可以使用luasocket获取随机数。

#!/usr/bin/env lua

local socket = require("socket")  --载入luasocket
math.randomseed(socket.gettime())  --获取时间戳
local random_number = math.random(1,100000)  --获取随机数

优点

可以支持更精确的随机数

缺点

需要额外安装模块

Previous Post

nginx+lua实现web服务与复杂逻辑

Next Post

Luasocket安装

Related Posts