短链服务架构实践


1.存储采用REDIS做数据存储

2.id/keyword -> long_url

 hset key_long_url id/keyword  long_url

3. md5(long_url) -> id/keyword

  hset key_short_url md5(long_url)  id/keyword -> 用来判断长链是否已经被转过了,如果是直接返回对应的短链,如果不是开始转短链并双向存储。

4. id -> keyword (数字ID到字符串的转换算法)

    /** 
     * 数字与字符串的映射, 不能以数字0开头自定义短链
     * @param int or string $input
     * @param boolean $toNum default false
     * @return string/int
     */
    public static function alphaId($input, $toNum = false) {
        $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        if ($toNum) {
            $integer = 0;
            $string = $input;
            $string = strrev( $string  );  
            $baselen = strlen( $chars );
            $inputlen = strlen( $string );
            for ($i = 0; $i < $inputlen; $i++) {
                $index = strpos( $chars, $string[$i] );
                $integer = bcadd( $integer, bcmul( $index, bcpow( $baselen, $i ) ) );
            }   
            return $integer;
        } else {
            $string = ''; 
            $num = $input;
            $len = strlen( $chars );
            while( $num >= $len ) { 
                $mod = bcmod( $num, $len );
                $num = bcdiv( $num, $len );
                $string = $chars[ $mod ] . $string;
            }   
            $string = $chars[ intval( $num ) ] . $string;
    
            return $string;
        }   
    }

  

5. id生成器 hset allocate short_url_id 100000000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值