首页 > 代码库 > openresty && hashids&& redis 生成短链接

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 安装
  1. luarocks install hashids
3. 代码
 nginx 配置格式
 
  1. location /test {
  2. content_by_lua_block {
  3. -- 此处为伪代码,需要自己处理,代码见下面的
  4. ngx.say(hashid)
  5. }
  6. }
 a. redis id 生成
  1. local hashids = require("hashids");
  2. local redis = require "resty.redis"
  3. local red = redis:new()
  4. local ids= 1;
  5. red:set_timeout(1000) -- 1 sec
  6. local ok, err = red:connect("127.0.0.1", 6379)
  7. if not ok then
  8. ngx.say("failed to connect: ", err)
  9. return
  10. end
  11. ids, err = red:incrby("ids", 1)
  12. if not ok then
  13. ngx.say("failed to set ids: ", err)
  14. return
  15. end
  16. -- ngx.say("set result: ", ok)
  17. local ok, err = red:set_keepalive(10000, 100)
  18. if not ok then
  19. ngx.say("failed to set keepalive: ", err)
  20. return
  21. end
b. hashids 生成短链接
  1. local h = hashids.new("dalong")
  2. hash = h:encode(ids)
  3. ngx.say(hash)
c. 访问
http://ip:port/test 产看效果

技术分享
 d. 次代码可以进行decode 获取id,中的来说还是比较方便的
  1. local hashids = require("hashids");
  2. local h = hashids.new("dalong")
  3. hash = h:decode("y71ZEKxm")
  4. print(hash[1])

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




  
 

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