Openresty简介: OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。由中国人章亦春发起,提供了很多高质量的第三方模块。
这里链接一个Openresty官网:[OpenResty® - 中文官方站]。
还有一个最佳实践: [OpenResty 最佳实践]。
张开涛的博客:[跟我学OpenResty(Nginx+Lua)]。
开始爬坑经历 :从上面的一些资料中我都没有找到lua如何连接redis集群,本人也是刚接触lua,所以自己去写一个连接redis集群的工具类也不现实,因此在网上疯狂百度,终于我找到了一篇文章:[lua连接redis集群 ],它告诉我需要从github地址:https://github.com/cuiweixie/lua-resty-redis-cluster 下载lua-resty-redis-cluster模块,只需要用到包中2个文件rediscluster.lua和redis_slot.c。而 .c文件无法在nginx配置文件中引入,需要编译成.so文件,编译命令: gcc SOURCE_FILES -fPIC -shared -o TARGET 。
因此我就按照它说的下载之后开始编译。
坑一 :我一开始在本机电脑windows上搭了一个openresty环境,于是我在windows上编译,发现报错:gcc 命令不可以使用。不知道是不是要安装啥,然后我就在Linux上装了一个环境,开始在Linux上编译。
坑二:我把redis_slot.c文件放在openresty安装目录下的lualib下(我考虑到编译需要lua的脚本)当我开始编译的时候发现报错说是:fatal error:lua.h:No such file or directory
命令:cp *.h /usr/include/
坑三:编译好了之后生成一个.so文件了,环境算可以了,然后开始跑一下连接redis集群,发现报错:
我打开rediscluster.lua查看源代码:
原来config表中的key是serv_list,这个key是不能随意替换的,这个一定要记住,看一下人家的代码。解决办法把 redis_cluster_server 换成 serv_list。
再一次看网上那个列子:
注意这个config表里面有两个key,一个是name,一个是serv_list。这两个key一定要有,而且名字不能变,因为源码中就是这么用的。
终于经过几个坑,lua可以连接redis集群并可以操作redis集群了。
接下来继续爬坑。。。
坑四:然后好景不长,业务中我需要给redis的key设置过期时间,我企图使用expire命令,然后运行时报错了,说是expire是一个nil值。再一次打开 rediscluster.lua
发现好多命令都是置灰的,也就是这些命令是不支持的。没办法继续找找看有没有其他的集群工具类吧,谁让我是lua菜鸟呢。
之后还真找到了另一个工具:github.com/steve0511/r…
然后它是支持所有的命令的,作者说是在上面那个工具的基础上开发的。
到此lua连接redis集群的坑陆续爬完。