openresty && hashids&
1. 原理
a. 从redis 获取需要表示的短链接的id( redis incr)
b. hashids 编码 id
c. openresty conteent_by_lua_block 阶段显示数据
2. 安装以来的插件
a. lua hashdis 使用 luarocks 注意需要先安装lua 开发包
b. copy hashids lua 包 到 openresty 的lualib 方便调用
c. redis 安装
luarocks install hashids
3. 代码
nginx 配置格式
location /test {
content_by_lua_block {
-- 此处为伪代码,需要自己处理,代码见下面的
ngx.say(hashid)
}
}
a. redis id 生成
local hashids = require("hashids");
local redis = require "resty.redis"
local red = redis:new()
local ids= 1;
red:set_timeout(1000) -- 1 sec
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
ngx.say("failed to connect: ", err)
return
end
ids, err = red:incrby("ids", 1)
if not ok then
ngx.say("failed to set ids: ", err)
return
end
-- ngx.say("set result: ", ok)
local ok, err = red:set_keepalive(10000, 100)
if not ok then
ngx.say("failed to set keepalive: ", err)
return
end
b. hashids 生成短链接
local h = hashids.new("dalong")
hash = h:encode(ids)
ngx.say(hash)
c. 访问
d. 次代码可以进行decode 获取id,中的来说还是比较方便的
local hashids = require("hashids");
local h = hashids.new("dalong")
hash = h:decode("y71ZEKxm")
print(hash[1])
4. 扩展
实际系统如果使用还需要考虑redis 的高可用,安全,以及如何进行数据分析的问题