在之前的文章中,已经介绍了ngx_lua的一些基本介绍,这篇文章主要着重讨论一下如何通过ngx_lua同后端的memcached、redis进行非阻塞通信。
1. Memcached
在Nginx中访问Memcached需要模块的支持,这里选用HttpMemcModule,这个模块可以与后端的Memcached进行非阻塞的通信。我们知道官方提供了Memcached,这个模块只支持get操作,而Memc支持大部分Memcached的命令。
Memc模块采用入口变量作为参数进行传递,所有以$memc_为前缀的变量都是Memc的入口变量。memc_pass指向后端的Memcached Server。
配置:
- #使用HttpMemcModule
- location = /memc {
- set $memc_cmd $arg_cmd;
- set $memc_key $arg_key;
- set $memc_value $arg_val;
- set $memc_exptime $arg_exptime;
- memc_pass '127.0.0.1:11211';
- }
输出:
- $ curl 'http://localhost/memc?cmd=set&key=foo&val=Hello'
- $ STORED
- $ curl 'http://localhost/memc?cmd=get&key=foo'
- $ Hello
配置:
- #在Lua中访问Memcached
- location = /memc {
- internal; #只能内部访问