lua常用的工具类封装汇总

2022-09-13 15:58:37 浏览数 (1)

Lua引用模块与包点击查看菜鸟教程

简单配置如下

代码语言:javascript复制
#LUA_PATH
# 文件路径以 ";" 号分隔,最后的 2 个 ";;" 表示新加的路径后面加上原来的默认路径,路径可以自定义的,我这里是把lua模块放到了"/data/www/code/lua/util/"下面。
export LUA_PATH="/data/www/code/lua/util/?.lua;;"  
# 更新环境变量参数,使之立即生效
source ~/.profile

假如你已经配置好了lua模块默认路径

调用

代码语言:javascript复制
-- require("<模块名>")
-- 或者
-- require "<模块名>" 

-- 我这里以加载字符串分割为例演示
local strsplit = require("strsplit");
local ta = strsplit.split("122sd_lsdjfdh_sasasa_rrt", "_");
print("类型:" .. type(ta));
for k, v in ipairs(ta) do
  print("键:" .. k, "值:" .. v);
end
-- 运行lua run.lua 输出结果
-- 类型:table
-- 键:1    值:122sd
-- 键:2    值:lsdjfdh
-- 键:3    值:sasasa
-- 键:4    值:rrt

字符串分割(strsplit.lua)
代码语言:javascript复制
local _M = {}
function _M.split(str, delim)
  if type(delim) ~= "string" or string.len(delim) <= 0 then
      return
  end
  local start = 1
  local tab = {}
  while true do
      local pos = string.find(str, delim, start, true)
      if not pos then
          break
      end
      table.insert(tab, string.sub(str, start, pos - 1))
      start = pos   string.len(delim)
  end
  table.insert(tab, string.sub(str, start))
  return tab
end
return _M

nginx 共享缓存get以及set

openResty的nginx.conf配置

代码语言:javascript复制
worker_processes  1;
error_log logs/error.log;
events {
  worker_connections 1024;
}
http {
  # 设置纯 Lua 扩展库的搜寻路径(';;' 是默认路径)
  lua_package_path "/data/www/code/nginx lua/config/lua_p/?.lua;;";
  # 设置 C 编写的 Lua 扩展模块的搜寻路径(也可以用 ';;')
  lua_package_cpath "/data/www/code/nginx lua/config/lua_p_c/?.so;;";
  # 内存共享 缓存大小5m
  lua_shared_dict my_limit_store 5m;

  server {
     listen 8080;
     location /share {
          lua_code_cache off;
          content_by_lua_file ./config/lua/share.lua;
          charset utf-8;
     }
  }
}

ngxshare.lua模块

代码语言:javascript复制
local _M = {}
function _M.shared_dic_get(dic, key)
  local value = dic:get(key);
  return value;
end

function _M.shared_dic_set(dic, key, value, exptime)
  if not exptime then
      exptime = 0;
  end
  local succ, err = dic:set(key, value, exptime);
  return succ;
end

return _M

share.lua文件

代码语言:javascript复制
-- 引入模块
local ngxshare = require("resty.ngxshare");
-- 设置参数
ngxshare.shared_dic_set(ngx.shared.my_limit_store, 'limit_store', 1, 0);
-- 获取参数
ngx.say(ngxshare.shared_dic_get(ngx.shared.my_limit_store, 'limit_store'));
-- 测试  http://192.168.56.2:8080/share
# 1

0 人点赞