作者回复: lua_max_pending_timers 和 lua_max_running_timers 这两个指令来做控制
作者回复: 没有明白为什么把主动更新的逻辑放在 init 阶段呢?
你可以在 init 阶段获取全量数据,通过长连接监听事件通知,去获取增量的数据。
这时候其实你可以只用 lru 缓存,去掉共享字典这个 L2 缓存。
APISIX(https://github.com/iresty/apisix)也是这么实现的,它的数据源在 etcd,通过 etcd 的 watch 来获取上游的变更。
作者回复: 大部分情况下确实如你所说,共享字典在 reload 的时候不会丢失。也有一种特例,如果在 init 阶段或者init_worker阶段就能从 L3 主动获取到所有数据,那么只有 L1 其实也是可以接受的。