Nginx Lua 开发 - Memcached 操作
2019-03-29 11:03
881 查看
版权声明:@潘广宇博客, https://blog.csdn.net/panguangyuu/article/details/88878463
在 Nginx 中访问 Memcached 有两种方式:mem-nginx-module 与 lua-resty-memcached。Openresty 可直接使用这两种方式进行访问。
一、mem-nginx-module
1)简单例子
[code]# mem-nginx-module 使用 location /memnginxmodule { set $memc_cmd $arg_cmd; set $memc_key $arg_key; # key # set $memc_value $arg_value; # value set $memc_flags $arg_flags; # flag , 默认为 0 set $memc_exptime $arg_exptime; # 过期时间,默认为 0 memc_pass 127.0.0.1:11211; } location /memnginxmodule_status { set $memc_cmd stats; # 查看 Memcached stats 信息 memc_pass 127.0.0.1:11211; } # $memc_cmd 默认使用根据HTTP请求方法确定操作类型 # GET 请求 , get 操作 # POST 请求 , add 操作 # PUT 请求 , set 操作 # DELETE 请求 , delete 操作
2)标记 Last-Modified
当设置 Last-Modified (最后修改时间)头域,当文件达到一定缓存过期时间,如果请求导的服务器文件没有改变则返回304,此时浏览器就访问本地缓存。
[code]location /mem_modi { default_type text/html; set $memc_key $arg_key; memc_pass 127.0.0.1:11211; memc_flags_to_last_modified on; # 设置 flag 为时间戳,并作为Last-Modified的值 }
3)访问 Unix 域套接字服务
[code]# unix socket location /unixdemo { set $memc_key $arg_key; set $memc_cmd get; memc_pass unix:/tmp/memcached.sock; }
4)命令
get操作:如果获取成功,返回 200ok,否则返回 404,其他错误将返回 502 (Error / Client Error / Server Error)
set操作:如果设置成功,返回 201ok,否则返回 404,其他错误将返回 502
5)推荐使用连接池
使用 mem-nginx-module 时,推荐使用 HttpUpstreamKeepaliveModule 实现后端 memcached 服务器连接缓存,使用连接池会显著提高访问速度
[code]## 如: http { upstream mem_backend { server 127.0.0.1:11211; ... } server { location /mem_test { memc_pass mem_backend; } } }
二、lua-resty-memcached
1)基本使用
[code]location /restymem { content_by_lua ' -- 引入memcached local memcached = require "resty.memcached" local mem, err = memcached:new() if not mem then ngx.say("fail to instantiate ", err) return end -- 设置超时时间 mem:set_timeout(1000) -- 连接memcached local ok, err = mem:connect("127.0.0.1", 11211) if not ok then ngx.say("fail to connect ", err) return end -- 清除缓存中的kv、get/set KEY等操作 local ok, err = mem:flush_all() local ok, err = mem:set("dog", 32) local res, flags, err = mem:get("dog") -- 关闭 local ok, err = mem:close() '; }
2)注意事项:
a、使用本库不能用在 init_by_lua 、set_by_lua 、log_by_lua 、header_filter_by_lua 上下文中
b、resty.mysql 不能存放在模块级的变量中(其他例程会分享),只能存放在局部变量或ngx.ctxtable中
相关文章推荐
- 【WEB开发】memcached的操作与应用
- Linux c 开发 - Memcached源码分析之增删改查操作(5)
- leapmotion开发(3)实例操作
- 基于MapWinGis的开发探索(二)——注册、加载、基本操作
- 利用shell命令操作Memcached
- 基于lucene的案例开发:纵横小说数据库操作
- memcached的操作
- 使用Simple-Spring-Memcached注解做缓存操作
- html5在phonegap下开发iOS应用常见操作
- Android开发 标题栏、状态栏常用操作记录
- C++软件开发中“时间”相关操作全攻略
- ArcGIS Engine 开发 (二)C#new一个接口成功的原因,出现无法嵌入互操作类型的问题的解决
- 基于MapWinGis的开发探索(二)——注册、加载、基本操作
- Unity开发HTC vive 二、操作GUI
- ios开发之--NSString的操作
- 16—【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能
- 【web开发】☆★之利用POI操作Excel表格系列教程【5】设置不同格式单元格
- wamp环境 安装memcached具体操作
- 使用C#和Excel进行报表开发(五)-操作单元格边框和颜色 【转】
- 使用Simple-Spring-Memcached注解做缓存操作