Nginx + Lua + redis (一)

来源:互联网 发布:淘宝店铺最迟多久发货 编辑:程序博客网 时间:2024/06/01 08:21

使用 Lua 脚本语言操作 Redis。

由于大量的 Lua 代码写在 Nginx 中,会使配置文件显得很繁琐,所以这里使用 content_by_lua_file 来引入 Lua脚本文件。

要使用 content_by_lua_file,需要安装 nginx_lua_module 模块。

安装介绍,猛击这里:nginx_lua_module


大神 章亦春 提供了一个很方便的开发包,如下:

[plain] view plaincopyprint?
  1. git clone https://github.com/agentzh/lua-resty-redis.git  

该包中,有一个 Lib 目录,将 Lib 目录下的文件和子目录拷贝至目录 /data/www/lua


在 Nginx 配置文件中,需要加一行代码,以便引入 redis.lua

注:加在 http 段里。

[plain] view plaincopyprint?
  1. lua_package_path "/data/www/lua/?.lua;;";  


为了使得 lua 脚本的修改能及时生效,需要加入一行代码,如下:

注:在 server 段里,加入代码,如果不加此代码或者设置为 on 时,则需要重启 Nginx

[plain] view plaincopyprint?
  1. lua_code_cache off;  

在 Nginx 配置文件中,加入一个Location

[plain] view plaincopyprint?
  1. location /lua {  
  2.     content_by_lua_file /data/www/lua/test.lua;  
  3. }  

注:引入 test.lua 脚本文件


Lua 脚本文件:test.lua

[plain] view plaincopyprint?
  1. local redis = require "resty.redis"  
  2.   
  3. local cache = redis.new()  
  4.   
  5. local ok, err = cache.connect(cache, '127.0.0.1', '6379')  
  6.   
  7. cache:set_timeout(60000)  
  8.   
  9. if not ok then  
  10.         ngx.say("failed to connect:", err)  
  11.         return  
  12. end  
  13.   
  14. res, err = cache:set("dog", "an aniaml")  
  15. if not ok then  
  16.         ngx.say("failed to set dog: ", err)  
  17.         return  
  18. end  
  19.   
  20. ngx.say("set result: ", res)  
  21.   
  22. local res, err = cache:get("dog")  
  23. if not res then  
  24.         ngx.say("failed to get dog: ", err)  
  25.         return  
  26. end  
  27.   
  28. if res == ngx.null then  
  29.         ngx.say("dog not found.")  
  30.         return  
  31. end  
  32.   
  33. ngx.say("dog: ", res)  
  34.   
  35.   
  36. local ok, err = cache:close()  
  37.   
  38. if not ok then  
  39.         ngx.say("failed to close:", err)  
  40.         return  
  41. end  

测试结果如下:

[plain] view plaincopyprint?
  1. [root@localhost conf]# curl http://localhost/lua  
  2. set result: OK  
  3. dog: an aniaml  

成功!
0 0
原创粉丝点击