Lua生成Guid(uuid)

本文介绍了全局唯一标识符(GUID)和通用唯一标识符(UUID)的概念及其应用。GUID是一种128位长的数字标识符,确保在网络环境中生成的标识符具有唯一性。文中还提供了一个Lua脚本示例,演示了GUID的生成过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  全局唯一标识符(GUIDGlobally Unique Identifier)也称作 UUID(Universally Unique IDentifier) GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUIDGUID 的总数达到了2^1283.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0GUID一词有时也专指微软对UUID标准的实现。
在理想情况下,任何计算机计算机集群都不会生成两个相同的GUID随机生成两个相同GUID的可能性是非常小的,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。
 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如注册表项、类及接口标识、数据库、系统目录等对象。
function guid()
    local seed={'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}
    local tb={}
    for i=1,32 do
        table.insert(tb,seed[math.random(1,16)])
    end
    local sid=table.concat(tb)
    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_time=os.clock()
while s<50000 do
    s=s+1
    print(s,guid())
end
print('execute_time='..tostring(os.clock()-start_time))

 

转载于:https://www.cnblogs.com/tpfOfBlog/p/8125327.html

### 在 Lua 脚本中生成或使用 UUID 的方法 在 Lua生成或使用 UUID 可以通过多种方式实现,包括使用现有的库(如 `lua-resty-jit-uuid`)、编写自定义函数以及利用其他开源项目。以下是详细的介绍和示例代码。 #### 方法一:使用 `lua-resty-jit-uuid` `lua-resty-jit-uuid` 是专门为 OpenResty 设计的高性能 UUID 生成器。它可以通过 LuaRocks 工具轻松安装,并提供了简洁易用的接口[^1]。 ##### 安装步骤 确保已安装 OpenResty 和 LuaRocks 后,运行以下命令: ```bash luarocks install lua-resty-jit-uuid ``` ##### 使用示例 加载模块并通过其提供的方法生成 UUID v4 值。 ```lua local jit_uuid = require("resty.jit-uuid") -- 初始化随机种子 jit_uuid.seed() -- 创建一个新的UUID (v4) local new_uuid = jit_uuid.uuid() print(new_uuid) -- 输出类似于 "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx" ``` 此段代码初始化了随机数发生器并调用了 `uuid()` 函数来获取新的唯一标识符[^1]。 #### 方法二:基于纯 LuaUUID 生成功能 如果不想依赖任何外部库,也可以自己构建一个简单的 UUID 生成器。下面是一个基本的例子[^4]: ```lua function generate_uuid_v4() local template ='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' return string.gsub(template, '[xy]', function(c) local v = (c == 'x') and math.random(0, 0xf) or math.random(8, 0xb) return string.format('%x', v) end) end print(generate_uuid_v4()) -- 打印类似 "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx" 的字符串 ``` 这段脚本按照标准格式构造了一个版本号为 4 的 UUID 字符串。其中字母 x 表示十六进制数字,而 y 则限定范围至 b-f 来符合规范要求。 #### 方法三:集成到 Nginx/OpenResty 环境下 当需要将 UUID 功能嵌入到 HTTP 请求响应链路当中时,可以结合 Nginx 配置文件与 Lua 脚本来完成任务[^2]。例如设置如下服务器区块即可对外暴露端口供客户端访问从而获得动态产生的 ID 编码序列。 ```nginx http { ... server { listen 8082; location /get_uuid { content_by_lua_block { local res = require('resty.jit-uuid').uuid() ngx.say(res) } } } } ``` 以上配置使得每当有 GET 请求发送至路径 `/get_uuid` 上都会触发内部逻辑进而反馈独一无二的结果给调用方[^2]。 --- ### 总结 无论是追求极致性能还是倾向于保持独立性免去繁杂管理负担的情况下都有相应的解决方案可供选择。对于大多数应用场景而言推荐优先考虑成熟的第三方组件因为它们往往经过充分检验具备良好的兼容性和稳定性表现;当然如果有特殊定制化需求亦不妨尝试亲手打造专属工具集!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值