nginx嵌入lua脚本操作redis
来源:互联网 发布:黑米软件官网 编辑:程序博客网 时间:2024/05/29 18:07
此前稍微提过,用nginx里面执行lua脚本,可以执行一些原有无法实现的必须到后端去控制。目前有个需求,是根据不同的传入id,判断其类型,反向代理到不同的项目后端,如果是采用后端来做的话,基本上很难去实现,然而我们在前端用lua去判断ID的类型就OK了,为了保证前端nginx的速度,所以将id的类型存入redis中,由lua去读取redis的数据进行id类型判断。
目前,用在nginx中用lua读取redis的数据有两套方案,一套是用lua自身的redis-client库,一套是采用nginx的redis模块。为了保证性能和可靠性,我们采用lua去用subprocess调用nginx的redis模块进行读取,由于nginx的redis模块只是单纯的做数据的插入和读取,并没有做redis协议的解析,所以,我们如果要使用的话,还必须加lua的redis-parse进行解析数据协议。
如何安装nginx+lua的环境此前已经有文章介绍过了,这里就不在阐述,接下来只需要在该基础上,编译进多两个模块(set-misc-nginx-module,redis2-nginx-module)即可。
定义redis连接池(1024个固定连接):
upstream redis_pool { server host:6379; keepalive 1024; }定义个get的操作(接收key的连接参数,然后作为key去redis获取原始数据,/rget?key=xxx 来获取,此行为作为接下来的lua使用):
location /rget{ default_type 'text/plain'; set_unescape_uri $key $arg_key; redis2_query get $key; redis2_pass redis_pool; }定义真正的location和lua脚本使用:
location /rt{ default_type 'text/plain'; set $hs ''; access_by_lua ' local res = ngx.location.capture("/rget",{ args = { key = ngx.var.arg_key } } ngx.var.hs = res.body; '; echo $hs; }通过lua的capture操作,可以内部发起子进程去调用/rget来获取redis的值,并且赋予$hs变量,需要注意的是,这里得到的res.body是完整的redis数据,没有做任何协议解析,比如如果找不到key对应的value,则$hs是$-1。
0 0
- nginx嵌入lua脚本操作redis
- lua脚本操作redis数据库
- nginx用lua脚本读取redis(脚本篇)
- Redis之使用lua脚本操作redis数据库的原因
- nginx用lua脚本读取redis(安装篇)
- Nginx 内嵌lua脚本,结合Redis使用
- C++嵌入lua脚本
- Lua教程(1): C++嵌入Lua脚本
- Lua教程: C++嵌入Lua脚本(1)
- nginx+lua+redis
- Nginx+Lua+Redis实例
- nginx+lua+redis 使用方法
- nginx+lua+redis安装
- nginx+lua+redis搭建
- nginx+lua+redis
- Nginx+Lua访问Redis
- nginx + lua + redis
- Nginx + Lua + Redis
- Git指令合辑
- 正态分布的努力与难度
- 119A - Epic Game
- Android实现推送方式解决方案
- 黑马程序员 JAVA基础学习笔记 继承等
- nginx嵌入lua脚本操作redis
- 取球游戏
- =读取日志文件,正则表达式匹配出有用信息,并且保存到csv文件。
- 如何将数据库中存的树转化为树形列表(以easyui的tree为例)
- 远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者技术人员来获得
- 正则表达式总结
- 素数筛选
- C++Building Day THREE
- SVN学习总结