当前位置: 首页 > 工具软件 > Ourls-Resty > 使用案例 >

lua-resty-jit-uuid库

归泽宇
2023-12-01

lua-resty-jit-uuid

平时在开发服务时,总需要要生成一些唯一id值,例如UUID,在OpenResty里面也一样,所幸的是,OpenResty里面提供一个针对性能调整的纯LuaJIT的UUID,那就是lua-resty-jit-uuid模块。



一、lua-resty-jit-uuid是什么?

目前可以在GitHub上找到该库的信息,该模块创建就是为了成为LuaJIT和ngx_lua里面一个无依赖,高性能和完整的UUID库,它主要可以用来做uuid生成方法

二、使用步骤

1.示例

官方代码如下:

local uuid = require 'resty.jit-uuid'

uuid.seed()        ---> automatic seeding with os.time(), LuaSocket, or ngx.time()

uuid()             ---> v4 UUID (random)
uuid.generate_v4() ---> v4 UUID

uuid.generate_v3() ---> v3 UUID (name-based with MD5)
uuid.generate_v5() ---> v5 UUID (name-based with SHA-1)

uuid.is_valid()    ---> true/false (automatic JIT PCRE or Lua patterns)

2.在OpenResty里面使用

代码如下:

http {
    init_worker_by_lua_block {
        local uuid = require 'resty.jit-uuid'
        uuid.seed() -- very important!
    }

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

在ngx_lua中生成UUID时,需要在这个阶段为该模块设置种子init_worker。这一步非常重要,如果不这么做,可能会导致服务出现严重问题。同时这个地方也和lua_code_cache指令使用有关,如果Lua代码缓存被禁用,即

lua_code_cache off

时,每个ngx_lua处理的请求将运行在一个独立的Lua VM实例里面,后续请求期间生成的所以UUID序列将是相同的,除非每个请求都设置了该模块的种子。不推荐需要避免出现。


总结

总的来说,在使用UUID库时,除了简单的必要配置生成外,建议在开发环境上关闭代码缓存,这样可以不用关闭Nginx,只需重载Nginx就可以更改openResty代码功能,但是在生产环境上则需要开启,因为缓存会影响OpenResty响应速度。

 类似资料: