• Nginx + Lua + redis (一)(转)


    使用 Lua 脚本语言操作 Redis。

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

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

    安装介绍,猛击这里:nginx_lua_module


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

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

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


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

    注:加在 http 段里。

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


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

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

    [plain] view plain copy
     
     print?
    1. lua_code_cache off;  

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

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

    注:引入 test.lua 脚本文件

    Lua 脚本文件:test.lua

    [plain] view plain copy
     
     print?
    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 plain copy
     
     print?
      1. [root@localhost conf]# curl http://localhost/lua  
      2. set result: OK  
      3. dog: an aniaml 

    http://blog.csdn.net/vboy1010/article/details/7892120

  • 相关阅读:
    使用SELECT语句检索数据
    redis的安装和使用【2】redis的java操作
    Python之数据结构改造
    InnoDB undo log物理结构的初始化
    Redis-RDB持久化设置
    MySql(四)Select条件查询
    Node.js TLS/SSL
    Node.js 定时器
    Node.js 系统
    Node.js 字符串解码器
  • 原文地址:https://www.cnblogs.com/softidea/p/5246421.html
Copyright © 2020-2023  润新知