lolly/examples/lua-scripts/shared_dict.lua
xfy e3e5b1fe83 feat(lua): 实现共享字典 API (ngx.shared.DICT)
添加共享内存字典实现,支持并发安全的 key-value 存储:
- SharedDictManager: 管理多个命名的 SharedDict 实例
- SharedDict: 带 LRU 汰出策略的内存字典
- 支持 set/get/add/incr/size/free_space 操作
- 支持带 TTL 的过期机制

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 11:21:17 +08:00

43 lines
1.0 KiB
Lua

-- shared_dict.lua - 共享字典示例
-- 此脚本演示 ngx.shared.DICT 的使用
-- 获取共享字典(需要在配置中预先定义)
local dict = ngx.shared.DICT("my_cache")
-- 设置值
local ok, err = dict:set("user_count", "100")
if not ok then
ngx.log(ngx.ERR, "failed to set user_count: ", err)
end
-- 设置带 TTL 的值
ok, err = dict:set("session_token", "abc123", 3600) -- 1 小时过期
if not ok then
ngx.log(ngx.ERR, "failed to set session_token: ", err)
end
-- 获取值
local value, flags = dict:get("user_count")
ngx.say("user_count: ", value)
-- 自增计数器
local new_val, err = dict:incr("request_count", 1)
ngx.say("request_count: ", new_val)
-- 添加值(仅不存在时)
ok, err = dict:add("unique_key", "value")
if ok then
ngx.say("unique_key added successfully")
else
ngx.say("unique_key already exists")
end
-- 查看字典大小
local size = dict:size()
ngx.say("dict size: ", size)
-- 获取剩余容量
local free = dict:free_space()
ngx.say("free space: ", free)
ngx.say("Shared dict demo completed!")