网址缩短程序是怎么做的

                     网址缩短程序是怎么做的

[文章作者:孙立 链接:http://www.cnblogs.com/sunli/  更新时间:2010-03-25]

     近来微博很火,因为字数的限制,出现了很多网址缩短这种服务,比如sina自己用了自家的sinaurl.cn,想到自己曾经也注册了一个很短的域名k6.hk很久了,一直闲着,不知道干嘛用,突然想到可以用来做网址缩短,还不错。说干就干,一会就写好了。比如我的博客地址就可以缩短成:http://k6.hk/u 

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

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

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

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

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

 

 
  
<? php
//十进制转到其他制
function dec2any( $num , $base = 62 , $index = false ) {
if ( ! $base ) {
$base = strlen ( $index );
}
else if ( ! $index ) {
$index = substr ( " 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ " , 0 , $base );
}
$out = "" ;
for ( $t = floor ( log10 ( $num ) / log10 ( $base ) ); $t >= 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 );
}
else if ( ! $index ) {
$index = substr ( " 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ " , 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 ;
}

?>

     上面只是说了下实现的原理,如果要大规模的使用,后端可以抛弃数据,用key-value数据库存储,比如ttserver,将会有很高的性能提升。

      如果改下ttserver的源代码,通过ttserver的http接口直接跳转,那么性能将会非常高,一台机器一天提供上10亿次的中专都不是问题。用两台机器就可以实现高可用了,这种服务都不怎么耗费流量的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值