openresty && hashids&& redis 生成短链接

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. 访问

http://ip:port/test产看效果


openresty && hashids&& redis 生成短链接_第1张图片

d. 次代码可以进行decode 获取id,中的来说还是比较方便的

local hashids = require("hashids");

local h = hashids.new("dalong")

hash = h:decode("y71ZEKxm")

print(hash[1])

4. 扩展

实际系统如果使用还需要考虑redis 的高可用,安全,以及如何进行数据分析的问题

你可能感兴趣的:(openresty && hashids&& redis 生成短链接)