ngx.shared.DICT的使用安全吗?

我正在使用HttpLuaModule执行一些针对请求的操作。我的做法是设置 ngx.shared.dict 如下所示:

lua_shared_dict foo 10m;

然后我使用 rewrite_by_lua 从这个字典中获取和设置值。

我的问题是:

在高负载的情况下,需要每秒处理数百个请求。使用此字典是安全的吗?例如,在我的脚本中,该字典每60秒从 Redis 更新一次。如果我为字典中的每个键值对设置一个过期时间。然后突然所有连接都需要访问该键,但它不存在,那么它们所有人都会执行 Redis 调用以检索数据并更新字典。是这样吗?或者它是为其他用例设计的?

点赞
用户891636
用户891636

看看由 HttpLuaModule 作者编写的 Resty Lock 库

2013-10-02 06:17:09
用户2368470
用户2368470

ngx.shared.DICT 是线程安全的。

所有这些方法都是原子操作,即在同一个 lua_shared_dict 区域中对于多个 nginx worker 进程的并发访问都是安全的。

https://github.com/openresty/lua-nginx-module#ngxshareddict

2018-01-26 02:49:59