您的位置:首页 > 数据库 > Redis

redis lua脚本学习笔记math.random()获取随机数

2016-12-10 10:39 645 查看
原文:redis
lua脚本学习笔记math.random()获取随机数

源代码下载地址:http://www.zuidaima.com/share/1881598276013056.htm

最近在公司研究lua在redis中的使用,其中有个算法要使用到随机数,但运行lua的math.random()后一直返回同一个数字,万能的stackoverflow也没能得到答案,最后通过一个很magic的方式实现的。

代码如下:

function rnd(max)
--lua的第1次random数不靠谱,取第3次的靠谱
local ret=0
math.randomseed(os.time())
for i=1,3 do
n = math.random(max)
ret=n
end
return ret
end

print(rnd(10))

每次运行的结果都不同

10

9

8

基本能满足需求了,虽然会稍微损耗些cpu。

另外的解决思路是通过client端生成随机数来调用,比如java的Random类。

另附上lua的math函数库

函数名描述示例结果
pi圆周率math.pi3.1415926535898
abs取绝对值math.abs(-2012)2012
ceil向上取整math.ceil(9.1)10
floor向下取整math.floor(9.9)9
max取参数最大值math.max(2,4,6,8)8
min取参数最小值math.min(2,4,6,8)2
pow计算x的y次幂math.pow(2,16)65536
sqrt开平方math.sqrt(65536)256
mod取模math.mod(65535,2)1
modf取整数和小数部分math.modf(20.12)20   0.12
randomseed设随机数种子math.randomseed(os.time()) 
random取随机数math.random(5,90)5~90
rad角度转弧度math.rad(180)3.1415926535898
deg弧度转角度math.deg(math.pi)180
expe的x次方math.exp(4)54.598150033144
log计算x的自然对数math.log(54.598150033144)4
log10计算10为底,x的对数math.log10(1000)3
frexp将参数拆成x * (2 ^ y)的形式math.frexp(160)0.625    8
ldexp计算x * (2 ^ y)math.ldexp(0.625,8)160
sin正弦math.sin(math.rad(30))0.5
cos余弦math.cos(math.rad(60))0.5
tan正切math.tan(math.rad(45))1
asin反正弦math.deg(math.asin(0.5))30
acos反余弦math.deg(math.acos(0.5))60
atan反正切math.deg(math.atan(1))45
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: