lua保存缓存中文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua保存缓存中文件相关的知识,希望对你有一定的参考价值。

参考技术A 1.先链接mysql,按照广告分类ID读取广告列表,转换为json字符
2.链接redis,将广告列表json字符串存入redis
3.在/root/lua目录下创建ad_load.lua ,实现连接mysql 查询数据 并存储到redis中.
4.改/usr/local/openresty/nginx/conf/nginx.conf文件
重新启动nginx

Lua with nginx in openresty:如果在 redis 缓存中找不到数据,则将请求传递给 FastCGI

【中文标题】Lua with nginx in openresty:如果在 redis 缓存中找不到数据,则将请求传递给 FastCGI【英文标题】:Lua with nginx in openresty : pass a request to FastCGI if data does not found in redis cache 【发布时间】:2013-11-28 13:49:08 【问题描述】:

我有一个使用 fcgi 在 Nginx 上运行的 Django 网站。 对于 url /gifts/,我想通过使用 openresty 在 nginx.conf 文件中的 lua 中实现一些逻辑。

位置/礼物 try_files $uri @redis_cache; 位置@redis_cache default_type 文本/html; content_by_lua ' -- 从 url 获取键和值 本地参数 = ngx.req.get_uri_args() --创建redis连接 本地 redis = 需要“resty.redis”; 本地红色 = redis:new() 红色:set_timeout(1000) -- 1 秒 本地正常,错误 = 红色:连接(“127.0.0.1”,6379) 如果不行的话 ngx.log(ngx.ERR, err, "Redis 连接失败") 返回 ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE) 结尾 如果不是 args["key"] 那么 返回 ngx.exit(ngx.HTTP_NOT_FOUND) 结尾 如果 args["value"] 那么 本地 ok, err = red:set(args["key"], args["value"]) 结尾 如果不行的话 ngx.say("请传递键值对存储在缓存中", err) 结尾 -- 从redis缓存中获取数据 本地资源,err = red:get(args["key"]) 如果不是 res 那么 return ngx.say("值不在redis缓存中", err, "|") 结尾 ngx.say("Redis 中找到的值为:", res) ';

一切都按照要求正常工作,但是如果缓存在 Redis 中不可用,我想将请求重定向到 fcgi。 请帮助我如何进行此操作。

【问题讨论】:

【参考方案1】:

如果您只想提供来自 fcgi 的内容,请使用 internal redirection。如果您还想从 Lua 中填充缓存,则应该查看 subrequests。

【讨论】:

谢谢。你能提供任何子请求的示例代码吗?谢谢 类似:local value = ngx.location.capture("/my_fcgi_url").body; red:set(args["key"], value); return ngx.say("Value from FCGI: ", value) 当然添加错误检查等。阅读ngx.location.capture 文档。

以上是关于lua保存缓存中文件的主要内容,如果未能解决你的问题,请参考以下文章

nginx优化以及多级缓存

Nginx_lua缓存问题,关闭lua_code_cache

多级缓存架构 | 黑马Redis高级篇

基于Nginx+Lua改进多级缓存

Lua with nginx in openresty:如果在 redis 缓存中找不到数据,则将请求传递给 FastCGI

缓存利器Lua模块下的共享内存