网址缩短程序的实现方法

作者: nick 分类: php 发布时间: 2011-03-19 05:42 ė 6没有评论

程序的设计很简单,下面说下原理,

数据库只有两个字段seq(自增长数字)和url(数字的url地址,建立索引)。

用户输入一个url地址,查询表是否包含此url,如果存在,则返回seq的数字,

如果不存在,则插入数据库,得到一个新增加的自增seq数字,为了缩短数字占用的字符数,我们可以把abc等字母的大小写用上。这样10个数字,26个小 写字母,26个大小字母就组成了一个62进制了。比如数字10000000000(100亿)转换后就是aUKYOA,只有6位了,这样就能缩短很多的网 址了。

下面是php的进制转换代码,来源于php手册(简单吧),当然其他语言实现也是很简单的,

= 0; $t-- ) 
  {
    $a = floor( $num / pow( $base, $t ) );
    $out = $out . substr( $index, $a, 1 );
    $num = $num - ( $a * pow( $base, $t ) );
  }
  return $out;
}

function any2dec($num, $base=62, $index=false)
{ 
  if (!$base)
  {
    $base = strlen( $index );
  }
  elseif(!$index)
  {
    $index = substr("0123456789abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, $base);
  }
  $out = 0;
  $len = strlen($num) - 1;
  for ($t = 0; $t <= $len; $t++)
  {
    $out = $out + strpos($index, substr($num, $t, 1 )) * pow($base, $len - $t);
  }
  return $out;
}

echo(dec2any((329832)));
?>

得到缩短的网址以后,怎样实现网址的转发呢?可以利用 ttserver,将缩短网缩字串当作key,真实的 url 地址当作 value,存入ttserver中。ttserver本身就提供 http 访问,只需要稍加修改就可以直接利用 ttserver 进行缩短网址的转发:通过ttserver的http接口直接跳转,那么性能将会非常高,一台机器一天提供上10亿次的中专都不是问题。用两台机器就可以 实现高可用了,这种服务都不怎么耗费流量的。

原文:http://flatfish2000.javaeye.com/blog/772201

本文出自 传播、沟通、分享,转载时请注明出处及相应链接。

本文永久链接: https://www.nickdd.cn/?p=1428

发表评论

您的电子邮箱地址不会被公开。

Ɣ回顶部