Nginx + Lua + redis (一)(转)
转载
使用 Lua 脚本语言操作 Redis。
由于大量的 Lua 代码写在 Nginx 中,会使配置文件显得很繁琐,所以这里使用 content_by_lua_file 来引入 Lua 脚本文件。
要使用 content_by_lua_file,需要安装 nginx_lua_module 模块。
安装介绍,猛击这里:nginx_lua_module
大神 章亦春 提供了一个很方便的开发包,如下:
1. git clone https://github.com/agentzh/lua-resty-redis.git
该包中,有一个 Lib 目录,将 Lib 目录下的文件和子目录拷贝至目录 /data/www/lua
在 Nginx 配置文件中,需要加一行代码,以便引入 redis.lua。
注:加在 http 段里。
1. lua_package_path "/data/www/lua/?.lua;;";
为了使得 lua 脚本的修改能及时生效,需要加入一行代码,如下:
注:在 server 段里,加入代码,如果不加此代码或者设置为 on 时,则需要重启 Nginx。
在 Nginx 配置文件中,加入一个Location:
1. location /lua {
2. content_by_lua_file /data/www/lua/test.lua;
3. }
注:引入 test.lua 脚本文件
Lua 脚本文件:test.lua。
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
测试结果如下:
print?
1. [root@localhost conf]# curl http://localhost/lua
2. set result: OK
3. dog: an aniaml
4.