一看就懂系列之 高并发的短链接替换实现方案

转载请附上本文地址:http://blog.csdn.net/u011957758/article/details/75810039

前言

是的,相信只要是社交类的app,或多或少会涉及到描述。那么当存在链接的时候,我们不知道链接有多长,所以描述字段就没法准确的用varchar(140)了。
难道用text?好像不行,两方面原因:1.描述肯定要有限制的。2.dba不推荐text,效率你懂的。
所以对于高并发下的短链如何实现,做一个总结,用于日后留恋。

正文

简述

需求:
1.描述需要限制140字,链接按照固定的字数算比如10字。
2.收集链接,用于额外的分析。
思路:
1.需要拆分出链接,便于计算字数,同时描述里头必须以短链形式替换不知长度的链接,这样描述落地到数据库时候,设置比140字稍长一点的字段即可。
2.需要将链接进行收集并入库存储,方便取出分析。
3.考虑线上数据量超级大,需要进行分析将尽可能非必要的操作异步化,让短链实现时候基本处在内存中操作。

流程图

这里写图片描述

注意点

1.短链替换完后,先会在redis缓存中设定对应的链接,目的是防止数据积压导致异步任务延时进行,导致描述输出的时候,短链没地方进行替换。

2.先是[U]{短链id}[/U],后面为[L]{短链id}[/L],目的是为了区分出链接是否有真的落到数据库了,并且这样可以更直观的在数据库的描述中识别出来。

3.如果量级不大,也可以用此套方案,将t2的实现直接在t1中完成,异步增加了复杂度与更多不确定因素。

4.存储链接的数据库字段需要设置为“CHARACTER SET utf8mb4 COLLATE utf8mb4_bin”,兼容emoji的表情。

重点实现

1.去除特定的字符标记
public function stripUrls($des) {
    $des = preg_replace('/\[(U|L)\].+?\[\/(U|L)\]/i', '', $des);
    $des = str_ireplace('[U]', '', $des);
    $des
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值