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 產看效果
 
 d. 次代碼能夠進行decode 獲取id,中的來講仍是比較方便的
local hashids = require("hashids");
local h = hashids.new("dalong")
hash = h:decode("y71ZEKxm")
print(hash[1])
 
4. 擴展
  
  1. 實際系統若是使用還須要考慮redis 的高可用,安全,以及如何進行數據分析的問題
相關文章
相關標籤/搜索