六十二进制问题:

0-9A-Za-z 组成了62进制。

base62_encode(1) = 1;

base62_encode(61) = z;

base62_encode(62) = 10;

 

代码如下:

创建个表url: (id, url, short_url);

id自增,url唯一索引,short_url名称。数据量大Mysql性能可能不是很好,选用Redis,url放在set集合去重,hash存储对象(正向索引和负向索引),incr求自增id即可。

操作过程:写入过程,首先判断url是否在即可。在即可中就去hash中取对应的短链。不在那就incr将返回的值base62encode的结果就是短链地址,然后存入hash中。

读操作过程,就是去hash读取映射数据,进行重定向。nginx的lua脚本读取redis并发200w多。再用nginx搭建个nginx负载均衡服务器即可。Redis选用一主多从模式。