有时候用ngx.shared的时候想看一下到底存进去的值是什么,或者想列一下满足条件的键,或者想批量操作,所以这个项目就是用来解决这个问题的。
除了支持ngx.shared提供的操作以外,学习Redis增加了PING(测试连通性),KEYS(列出符合条件的键)和EVAL(在服务器上执行Lua脚本)。
已上传到opm,可以通过
opm install fffonion/lua-resty-shdict-server
一键安装。
由于目前stream和http子系统是两个独立的Lua VM,因此不能通过全局变量来共享数据。另外两个子系统的shdict是分别定义的,因此也不能互撸。所以如果想用这个模块来在redis-cli里撸http子系统下定义的shdict,需要这个补丁。
示例配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
http { lua_shared_dict dog 10m; } stream { lua_shared_dict dog 10m; server { listen 6380; require "resty.core.shdict" require "resty.shdict.redis-commands" local srv = require("resty.shdict.server") local s = srv:new("a-very-strong-password", "dog") s:serve() } |
然后
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ redis-cli -h 127.0.0.1 -p 6380 127.0.0.1:6380> set doge wow (error) ERR authentication required 127.0.0.1:6380> auth a-very-strong-password OK 127.0.0.1:6380> set doge wow OK 127.0.0.1:6380> get doge wow 127.0.0.1:6380> keys dog* 1) "doge" 127.0.0.1:6380> eval "return shdict.call('del', unpack(shdict.call('keys', ARGV[1])))" 0 dog* OK 127.0.0.1:18002> keys * (empty list or set) |