外观
一句话答案
长 URL→全局 ID/哈希→Base62 编码→短码,存储映射关系,访问时 302 重定向到原 URL,Redis 缓存热门短链。
核心要点
流程:
- 生成:长URL → 全局ID/哈希 → Base62 编码 → 存储映射
- 访问:短码 → 查 Redis/DB → 302 重定向
核心问题:
- 唯一性:自增ID+Base62(推荐)或 MurmurHash+冲突处理
- 性能:Redis 缓存热门短链
- 过期:TTL 定期清理
追问与易错
追问方向:
- 用 301 还是 302 重定向?为什么?(302 临时重定向,便于统计点击次数)
- 短码冲突怎么处理?(重试/布隆过滤器判重)
- 过期短链怎么清理?(TTL + 定时任务清理)
易错点:
- ❌ "用 MD5 截取就不会冲突"——哈希碰撞难以避免,需要碰撞处理机制
- ❌ "短链越短越好"——6 位 Base62 = 560 亿种组合,已经足够
💡 记忆锚点
短链系统两步走:生成——长URL通过全局自增ID(推荐)或MurmurHash得到数字,再Base62编码(0-9a-zA-Z共62字符)变成6位短码(62^6=560亿种够用);访问——短码查Redis缓存/DB映射表,302临时重定向到原URL(用302不用301是为了统计点击量)。