A click is a promise.
Someone follows a link because they want what is on the other side. The redirect is a necessary intermediary, but every network hop and storage round trip makes that intermediary more noticeable. Our job is to keep the work between receiving the request and writing the Location header small and predictable.
Start with the path, not a benchmark headline.
Vink uses Axum on Tokio. Axum integrates with Tower middleware and Hyper, giving us one async stack for connection handling, timeouts, and instrumentation. We have not published an Axum-versus-Actix latency comparison, and it would be misleading to claim that the framework alone makes redirects faster. In practice, cache placement, network distance, TLS termination, and connection reuse often matter more.
The nearest copy wins.
The first lookup is an in-process, bounded memory cache. A miss checks Redis with a short timeout. Postgres remains the source of truth and fills both caches on a miss. The process cache lives for two seconds; Redis entries live for thirty. Mutations invalidate Redis and broadcast to every core instance. Short TTLs bound staleness if invalidation messages are lost. They do not provide strongly consistent, instantaneous revocation across a partition.
Analytics takes a different lane.
A successful redirect offers a small event to a bounded channel. A worker batches those events into Postgres. Country enrichment uses an optional local MaxMind database, so there is no external geolocation call in the redirect path. If the channel fills, the redirect continues and a dropped-event counter increments. This trades lossless analytics for redirect availability. A durable streaming pipeline is the next step for deployments where every event must be retained.
Rust is a useful constraint.
Rust gives the core memory safety without a garbage collector, explicit ownership, and predictable resource management. It does not eliminate slow SQL, saturated pools, or overloaded infrastructure. Those still need budgets, metrics, load tests, and operational care. We keep the hot path separate from account management so those concerns can scale independently.
Measure the system you actually run.
Before claiming a latency target, measure warm and cold cache cases, password-protected requests, concurrent writes, and dependency failures. Record p50, p95, and p99 from the same region as your clients, and separately at the application boundary. Compare like-for-like TLS, connection reuse, and hardware. A benchmark that leaves out the network is useful, but it is not what your audience experiences.