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 的高可用,安全,以及如何进行数据分析的问题
 
 

openresty && hashids&& redis 生成短链接的更多相关文章

  1. 使用plv8+hashids生成短链接服务

    有写过一个集成npm plv8 以及shortid生成短链接id服务,实际上我们可以集成触发器自动生成url对应的短链接地址,hashids也是一个不错的选择. 以下是一个别人写的一个博客实现可以参考 ...

  2. 基于Redis的短链接设计思路

    [Markdown阅读][1] 今天上班的时候收到一个需要短链接的需求,之前的做法都是使用了新浪的短链接API(https://api.weibo.com/2/short_url/shorten.js ...

  3. Java生成短链接

    为什么要生成短链接 微博之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少. 那么使用短链接的作用有哪些呢?1.字数,2.统计,3.监控,4.过滤 ...

  4. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 package com.zdz.test; im ...

  5. 新浪微博API生成短链接

    通过新浪微博API,生成短链接,支持一次性转多个长链接 什么是短链接 短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串. 短链接服务 国内各大微博都推出了自己的短链接 ...

  6. PHP生成短链接方法

    PHP生成短链接方法方法一:新浪提供了长链接转为短链接的API,可以把长链接转为 t.cn/xxx 这种格式的短链接. API: http://api.t.sina.com.cn/short_url/ ...

  7. 生成短链接的URL

    假设你想做一个像微博短链接那样的短链接服务,短链接服务生成的URL都非常短例如: http://t.cn/E70Piib, 我们应该都能想到链接中的E70Piib对应的就是存储长链接地址的数据记录的I ...

  8. 用PHP和Python生成短链接服务的字符串ID

    假设你想做一个像微博短链接那样的短链接服务,短链接服务生成的URL都非常短例如: http://t.cn/E70Piib, 我们应该都能想到链接中的E70Piib对应的就是存储长链接地址的数据记录的I ...

  9. PHP调用新浪API 生成短链接

    我们经常收到类似于这样的短信(如下图),发现其中的链接并不是常规的网址链接,而是个短小精悍的短链接,产品中经常需要这样的需求,如果在给用户下发的短信中是一个很长的连接,用户体验肯定很差,因此我们需要实 ...

随机推荐

  1. angular $q的学习笔记转帖

    http://blog.segmentfault.com/bornkiller/1190000000402555 angular $q的一个不错的学习笔记

  2. nginx模块记录

    1. ngx_http_ssl_module 让Nginx可以支持HTTPS的模块 (1)ssl on | off; #是否开启ssl功能 (2)ssl_certificate file; #当前虚拟 ...

  3. angularJS----filter

    angularJS过滤器 过滤器(filter)正如其名,作用就是接收一个输入(隐式的接收数据源),通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组 ...

  4. Java环境搭建---(基础)

    首先下载eclipse开发工具,下载地址:http://www.eclipse.org/downloads/,界面如下: 选择eclipse juno(4.2)的版本进入界面 点击Downloads, ...

  5. 007-对象—— static静态方法属性内存构成及使用方法讲解

    <?php /* 7 对象 static静态方法属性内存构成及使用方法讲解 */ /*class a{ public $uname=11; static public function _a() ...

  6. java程序设计基础篇 复习笔记 第六单元

    第六章 一维数组 1 数组初始化语法 array initializer 2 for each loop 3 off-by-one error 通常是在循环中该使用<的地方使用了<= 4 ...

  7. AndroidStudio构建常见错误解答解决思路

    一.Error:Configuration with name 'default' not found.解决思路 出现这问题的原因是你依赖的工程没有make project,意思是你导入项目的工程没有 ...

  8. nginx Linux 开启自启

    编辑  /etc/init.d/nginx  添加一下内容   根据路劲修改. 添加可执行权限  chmod +x /etc/init.d/nginx 开启自启  chkconfig nginx on ...

  9. Android 屏幕密度适配

    Android Icon Size and Location for Apps   分辨率 DPI Density scale 1dp对应像素 1dp对应物理尺寸 Location Icon Size ...

  10. MayBatis与Spring的整合

    1. 步骤 第一步:导入相关的jar包(spring和mybatis) mybatis-spring-*.jar spring-jdbc-*.jar spring-tx-*.jar 第二步:sprin ...