美文网首页openresty
openresty && hashids&

openresty && hashids&

作者: dalongrong | 来源:发表于2017-07-06 10:30 被阅读42次

    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产看效果

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

    local hashids = require("hashids");

    local h = hashids.new("dalong")

    hash = h:decode("y71ZEKxm")

    print(hash[1])

    4. 扩展

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

    相关文章

      网友评论

        本文标题:openresty && hashids&

        本文链接:https://www.haomeiwen.com/subject/pcqhhxtx.html