java八股-高并发访问短链接项目实战

短链接高并发访问问题:
采用缓存预加载+分布式锁双重判定缓存+空对象缓存+布隆过滤器的方案解决缓存穿透,缓存击穿问题。

t-link表存储包括gid,长链接,短链接的所有信息,分片键是gid;
t-link-goto表仅存储gid和short-url,分片键是short-url,
用户过来访问的时候仅带上了short-url,因此只能先通过ShortLinkGotoDO带上分片键short-url查询出对应gid,再通过ShortLinkDO带上前面查询的gid,这个gid也是t-link的分片键,查询得到长链接,最后就哦了,分表了,因此必须带上分片键,否则会读扩散Union All

@SneakyThrows
    @Override
    public void restoreUrl(String shortUri, ServletRequest request, ServletResponse response) {
   
   
        // 短链接接口的并发量有多少?如何测试?详情查看:https://nageoffer.com/shortlink/question
        // 面试中如何回答短链接是如何跳转长链接?详情查看:https://nageoffer.com/shortlink/question
        String serverName = request.getServerName();
        String serverPort = Optional.of(request.getServerPort())
                .filter(each -> !Objects.equals(each, 80))
                .map(String::valueOf)
                .map(each -> ":" + each)
                .orElse("");
        String fullShortUrl = serverName + serverPort + "/" + shortUri;
        // 第一次查询Redis短链接缓存获取对应的长链接,如果获取到,那么重定向302到长链接
        String originalLink = stringRedisTemplate.opsForValue().get(String.format(GOTO_SHORT_LINK_KEY, fullShortUrl));
        if (StrUtil.isNotBlank(originalLink)) {
   
   
            shortLinkStats(buildLinkStatsRecordAndSetUser(fullShortUrl, request, response));
            (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hwg985

祝老板生意兴隆,财源广进

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值