Nginx + Lua + redis (一)(转)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 使用 Lua 脚本语言操作 Redis。 由于大量的 Lua 代码写在 Nginx 中,会使配置文件显得很繁琐,所以这里使用 content_by_lua_file 来引入 Lua 脚本文件。 要使用 content_by_lua_file,需要安装 nginx_lua_module 模块。

使用 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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
缓存 NoSQL Java
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
56 0
|
12天前
|
NoSQL Java Redis
lua脚本做redis的锁
这段内容是关于使用Redis实现分布式锁的Java代码示例。`RedisLock`类包含`lock`和`unlock`方法,使用`StringRedisTemplate`和Lua脚本进行操作。代码展示了两种加锁方式:一种带有过期时间,另一种不带。还提到了在加锁和解锁过程中的异常处理,并提供了相关参考资料链接。
17 3
|
14天前
|
存储 NoSQL 数据处理
Redis Lua脚本:赋予Redis更强大的逻辑与功能
Redis Lua脚本:赋予Redis更强大的逻辑与功能
|
29天前
|
NoSQL 关系型数据库 MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
183 0
|
30天前
|
NoSQL Java 应用服务中间件
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
|
1月前
|
NoSQL Java 数据库
优惠券秒杀案例 - CAS、Redis+Lua脚本解决高并发并行
优惠券秒杀案例 - CAS、Redis+Lua脚本解决高并发并行
|
2月前
|
NoSQL Java 数据处理
Redis和Spring Boot的绝佳组合:Lua脚本的黑科技
Redis和Spring Boot的绝佳组合:Lua脚本的黑科技
51 0
|
3月前
|
存储 NoSQL 关系型数据库
使用lua脚本操作redis
使用lua脚本操作redis
48 0
|
3月前
|
NoSQL Java Redis
Redis进阶-lua脚本
Redis进阶-lua脚本
56 0
|
2月前
|
算法 NoSQL Java
springboot整合redis及lua脚本实现接口限流
springboot整合redis及lua脚本实现接口限流
63 0