我正在使用HttpLuaModule
对请求执行某些操作。我这样做的方式就是设置ngx.shared.dict
,如下所示:
lua_shared_dict foo 10m;
然后我使用rewrite_by_lua
来获取和设置此字典的值。
我的问题是:
在高负载期间,每秒需要处理数百个请求。使用这本字典是否安全?例如,在我的脚本中,此字典每隔60秒从Redis
更新一次。如果我为字典中的每个键:值对设置了到期时间。然后突然所有连接都需要访问此密钥,但它不存在,然后所有连接都将执行Redis调用以检索数据和更新字典。真的吗?或者它可能是为其他一些用例而设计的?
答案 0 :(得分:2)
与HttpLuaModule同一作者查看Resty Lock library。
答案 1 :(得分:1)
ngx.shared.DICT是线程安全的。
所有这些方法都是原子操作,也就是说,对于同一个lua_shared_dict区域的多个nginx工作进程的并发访问是安全的。