Skip to main content

Documentation Index

Fetch the complete documentation index at: https://upstash.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

Need a Redis database fast? Skip the signup and dashboard — POST to https://upstash.com/start-redis to get an endpoint and token in a single HTTP request. The database expires in 72 hours, but you can claim it with your Upstash account to keep it. Especially useful for AI agents that need scratch storage on the fly.

Database Setup

Create a Redis database using Upstash Console or Upstash CLI. Select the global to minimize the latency from all edge locations. Copy the UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN for the next steps.

Project Setup

We will use Fastly CLI for deployment, so please install Fastly CLI. Create a folder for your project and run fastly init. Select [2] JavaScript, then [2] Empty starter for JavaScript
> fastly compute init

Creating a new Compute@Edge project.

Press ^C at any time to quit.

Name: [fastly-upstash]
Description:
Author: [enes@upstash.com]
Language:
[1] Rust
[2] JavaScript
[3] AssemblyScript (beta)
[4] Other ('bring your own' Wasm binary)
Choose option: [1] 2
Starter kit:
[1] Default starter for JavaScript
    A basic starter kit that demonstrates routing, simple synthetic responses and
    overriding caching rules.
    https://github.com/fastly/compute-starter-kit-javascript-default
[2] Empty starter for JavaScript
    An empty application template for the Fastly Compute@Edge environment which simply
    returns a 200 OK response.
    https://github.com/fastly/compute-starter-kit-javascript-empty
Choose option or paste git URL: [1] 2
Install @upstash/redis:
npm install @upstash/redis
Now, we will create a Fastly Compute service by running, fastly compute publish. You need to add your Upstash database’s endpoint as a backend and select 443 as its port.
> fastly compute publish
 Initializing...
 Verifying package manifest...
 Verifying local javascript toolchain...
 Building package using javascript toolchain...
 Creating package archive...

SUCCESS: Built package 'fastly-upstash' (pkg/fastly-upstash.tar.gz)


There is no Fastly service associated with this package. To connect to an existing service
add the Service ID to the fastly.toml file, otherwise follow the prompts to create a
service now.

Press ^C at any time to quit.

Create new service: [y/N] y

 Initializing...
 Creating service...

Domain: [supposedly-included-corgi.edgecompute.app]

Backend (hostname or IP address, or leave blank to stop adding backends): global-concise-scorpion-30984.upstash.io
Backend port number: [80] 443
Backend name: [backend_1] upstash

Backend (hostname or IP address, or leave blank to stop adding backends):

 Creating domain 'supposedly-smart-corgi.edgecompute.app'...
 Creating backend 'upstash' (host: global-concise-scorpion-30984.upstash.io, port: 443)...
 Uploading package...
 Activating version...

The Code

Update src/index.js as below:
import { Redis } from "@upstash/redis/fastly";

addEventListener("fetch", (event) => event.respondWith(handleRequest(event)));

async function handleRequest(event) {
  const redis = new Redis({
    url: "UPSTASH_REDIS_REST_URL",
    token: "UPSTASH_REDIS_REST_TOKEN",
    backend: "upstash",
  });
  const data = await redis.incr("count");
  return new Response("View Count:" + data, { status: 200 });
}

Deploy

Deploy: fastly compute deploy After deployment, the CLI logs the endpoint. You can check the logs with: fastly log-tail --service-id=<YOUR_FASTLY_SERVICE_ID>

Run Locally

To run the function locally add the backend to your fastly.toml as below:
[local_server.backends.upstash]
url = "UPSTASH_REDIS_REST_URL"
Then run: fastly compute serve