跳转至

jit-uuid: 快速且无依赖的 LuaJIT UUID 库

安装

如果您尚未设置 RPM 仓库订阅,请 注册。然后您可以继续以下步骤。

CentOS/RHEL 7 或 Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-jit-uuid

CentOS/RHEL 8+、Fedora Linux、Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-jit-uuid

要在 NGINX 中使用此 Lua 库,请确保已安装 nginx-module-lua

本文档描述了 lua-resty-jit-uuid v0.0.7,于 2017 年 12 月 16 日发布。


[![Module Version][badge-version-image]][luarocks-resty-jit-uuid] [![Coverage Status][badge-coveralls-image]][badge-coveralls-url]

一个纯 LuaJIT(无依赖)UUID 库,经过性能优化。

动机

该模块旨在成为一个无依赖、高性能且完整的 LuaJIT 和 ngx_lua 的 UUID 库。

与 FFI 和 C 绑定不同,它不依赖于系统中可用的 libuuid。此外,它的性能 优于 大多数(所有?)与之进行基准测试的生成器,包括 FFI 绑定。

最后,它提供了额外的功能,如 UUID v3/v4/v5 生成和 UUID 验证。

请参阅 基准测试 部分,了解与其他 Lua/LuaJIT UUID 库的比较。

使用

LuaJIT:

local uuid = require 'resty.jit-uuid'

uuid.seed()        ---> 使用 os.time()、LuaSocket 或 ngx.time() 自动播种

uuid()             ---> v4 UUID(随机)
uuid.generate_v4() ---> v4 UUID

uuid.generate_v3() ---> v3 UUID(基于名称,使用 MD5)
uuid.generate_v5() ---> v5 UUID(基于名称,使用 SHA-1)

uuid.is_valid()    ---> true/false(自动 JIT PCRE 或 Lua 模式)

OpenResty:

http {
    init_worker_by_lua_block {
        local uuid = require 'resty.jit-uuid'
        uuid.seed() -- 非常重要!
    }

    server {
        location / {
            content_by_lua_block {
                local uuid = require 'resty.jit-uuid'
                ngx.say(uuid())
            }
        }
    }
}

注意:在 ngx_lua 中生成 v4(随机)UUID 时,非常重要的是在 init_worker 阶段播种此模块。如果不这样做,您的工作进程将生成相同的 UUID 序列,这可能会导致您的应用程序出现严重问题。播种要求在 ngx_lua 之外的使用中也适用,尽管在这种情况下播种的要求不那么严格。此外,您应该注意使用 lua_code_cache 指令:如果禁用 Lua 代码缓存,后续请求中生成的所有 UUID 序列将是相同的,除非为每个请求播种此模块。就像禁用 Lua 代码缓存一样,这种行为将被视为 ngx_lua 反模式,您应该避免。

文档

文档可以在线访问 http://thibaultcha.github.io/lua-resty-jit-uuid/

基准测试

该模块在每个实现步骤上进行了仔细的基准测试,以确保 OpenResty 和纯 LuaJIT 的最佳性能。例如,UUID 验证将在可能的情况下使用 JIT PCRE 而不是 Lua 模式。

bench.lua 文件提供了对多个流行 UUID 库的 UUID 生成基准测试。

运行 make bench 以执行它们:

LuaJIT 2.1.0-beta1 生成 1e+06 UUIDs
UUID v4(随机)生成
1. resty-jit-uuid   耗时:   0.064228s    0%
2. FFI 绑定        耗时:   0.093374s   +45%
3. C 绑定          耗时:   0.220542s   +243%
4. 纯 Lua          耗时:   2.051905s   +3094%

UUID v3(基于名称和 MD5)生成(如果支持)
1. resty-jit-uuid   耗时:   1.306127s

UUID v5(基于名称和 SHA-1)生成(如果支持)
1. resty-jit-uuid   耗时:   4.834929s

UUID 验证(如果支持,70% 有效,30% 无效)
1. resty-jit-uuid (启用 JIT PCRE)    耗时:   0.223060s
2. FFI 绑定                          耗时:   0.256580s
3. resty-jit-uuid (Lua 模式)        耗时:   0.444174s

注意:在 ngx_lua 中的 UUID 验证性能(JIT PCRE)可以通过启用 lua-resty-core 大大提高。

贡献

特别欢迎改善该模块或基准测试性能(任何被基准测试库)的建议。

GitHub

您可以在 nginx-module-jit-uuid 的 GitHub 仓库 中找到此模块的其他配置提示和文档。