什么';这是在nginx代理中使用openrestylua脚本配置LRU缓存的最佳方法

什么';这是在nginx代理中使用openrestylua脚本配置LRU缓存的最佳方法,nginx,proxy,lua,openresty,Nginx,Proxy,Lua,Openresty,我正在使用openrestylua()来配置我们的nginx代理。我有一个定义了3个位置的main proxy.template,但我只想对多个进程初始化调用使用一个LRU缓存(因为它们需要很长时间,其他什么都不用,这就是我使用脚本的原因)。我想定义一个可以传递到每个位置的变量,但我很确定我做得不对。我有: #init_by_lua_file $lru_cache /etc/scripts/lua/process_cache.lua; location /process {

我正在使用openrestylua()来配置我们的nginx代理。我有一个定义了3个位置的main proxy.template,但我只想对多个进程初始化调用使用一个LRU缓存(因为它们需要很长时间,其他什么都不用,这就是我使用脚本的原因)。我想定义一个可以传递到每个位置的变量,但我很确定我做得不对。我有:

  #init_by_lua_file $lru_cache /etc/scripts/lua/process_cache.lua;

  location /process {
      access_by_lua_file /etc/scripts/lua/process_access.lua;

      proxy_set_header Content-Type "application/json";
      proxy_set_header Accept "application/json";

      proxy_ssl_server_name      on;

      proxy_pass $target;
  }

  location /process/init {
      set_by_lua_file $lru_cache /etc/scripts/lua/process_cache.lua;

      add_header Access-Control-Expose-Headers set-cookie;
      add_header Access-Control-Allow-Headers set-cookie;

      access_by_lua_file /etc/scripts/lua/process_init.lua;
  }
process_cache创建缓存(每个代理启动一个),我希望它被process_init.lua和process_access.lua引用,它们做不同的事情。例如,UI初始化只调用一次process_init并建立特定的缓存项,process_访问检查以确保该项未过期,如果未使用该项,则创建一个新项,因此不需要长时间调用另一个服务器

以上要求在两个位置之间传递lru_缓存变量。我最近的尝试是尝试将process_cache.lua放在/process/init路径中,但每次都会初始化它,因此每次/process/init调用都从空缓存开始是没有用的。想法?

考虑ngx.shared? 您可以为您的字符串指定exptime


:?

是的,我今天上午已经开始研究这种方法,因为似乎没有任何其他合理的解决方案,因为不真正支持员工之间的全局变量。在每个位置使用共享内存/字典来获取对我的lru缓存的引用似乎有点笨拙。让您知道它是否有效。不幸的是,共享字典不支持对缓存的内存引用。它也不能作为缓存用于我们的目的,因为我们希望在不牺牲任何东西的情况下维护openresty lru缓存的所有功能。由于我的需求范围和dict items的扩展时间,我发现这是一个可接受的二级缓存解决方案。