ngx.shared.DICT:flush_all() 能否立即釋放內存?答案是:清空鍵值,但內存不立即歸還操作系統。
get_keys() 返回空表,get() 返回 nil。操作 O(1),極快。lua_shared_dict 指令重新定義大小(需 reload)。flush_all() 後內存佔用不變,再次 set() 會復用原有槽位。expire 參數配合 set(key, val, ttl),自動過期不佔槽位。ngx.shared.DICT:capacity() / free_space() 觀察碎片率。lua_shared_dict mydict 100m; 避免擴容鎖競爭。local dict = ngx.shared.mydict
dict:set("k1", "v1", 60) -- 60秒過期
dict:flush_all() -- 立即清空所有鍵
local keys = dict:get_keys(0) -- 返回 {}
-- 內存仍佔用,但槽位可復用
「內存不會馬上釋放。但是 shared 內存 nginx 重啟之後就會釋放了。」—— 理解共享內存生命周期,避免誤判洩漏。