零成本用Cloudflare Workers + KV存储搭建企业级短链接服务,并实现访问统计。

2026-10-02

上周市场部的小李跑来找我,说他们要发一批短信,里面得放链接,问我公司有没有短链接工具。我说有啊,花钱买的那种一年好几千。他脸都绿了。

我说你别急,我给你搭一个,十分钟的事,不花钱。

先说人话:这俩东西到底是啥

Cloudflare Workers,你就理解成「云上门卫」。用户敲一下门(访问短链),门卫立刻翻登记本,告诉你该去哪个房间(跳转到原始长链接)。整个过程几毫秒,用户根本感觉不到。

KV 存储,就是那本登记本。Cloudflare 在全球几百个机房各放了一本,用户在哪个城市,就近读哪本,快得很。

免费额度给你划一下:Workers 每天 10 万次请求,KV 每天 10 万次读、1000 次写、1GB 存储。中小企业的短链需求,用到天荒地老都用不完。

动手三步

第一步,建一本登记本。 在 Cloudflare 后台点 Workers & Pages → KV,新建一个命名空间,名字随便叫,比如 LINKS。

第二步,写门卫的操作规程。 建一个 Worker,代码大概长这样:

export default {
  async fetch(request, env) {
    const code = new URL(request.url).pathname.slice(1);
    if (!code) return new Response('ok');

    const target = await env.LINKS.get(code);
    if (!target) return new Response('404', { status: 404 });

    // 顺手记一笔
    const day = new Date().toISOString().slice(0, 10);
    const key = `stat:${code}:${day}`;
    const n = parseInt(await env.LINKS.get(key) || '0');
    await env.LINKS.put(key, String(n + 1));

    return Response.redirect(target, 302);
  }
}

这段就是完整的短链服务了。门卫查本子、指路、然后在另一个本子上划一道「正」字。

第三步,绑个域名。 在你自己的域名下加一条解析,指向这个 Worker,比如 s.你的公司.com。以后 s.公司.com/abc123 就是短链。

两个坑,我踩过

坑一:跳转用 302,别用 301。 301 是永久跳转,浏览器会缓存,用户第二次点压根不经过你的门卫,统计数据就丢了。302 每次都会问一遍门卫,统计才准。

坑二:KV 不是数据库。 它是「最终一致性」——你在北京写进去,上海那边可能得过几十秒才能读到。而且同一秒来 100 个请求,计数器可能丢数。短链本身没问题(写一次读一万次),但**精确统计