Skip to content

Upstash

Upstash provides a serverless Redis database, which can be used as a key-value store of up to 1mb with a free account.

Create an Upstash account

Go to https://console.upstash.com/login

Create a database

  1. Click Create database

Untitled

  1. Name: whatever you want.
  2. Type: Regional
  3. Region: Iowa (us-central1), because it’s closest to Val Town’s servers.
  4. Enable TLS for security.

Screenshot 2023-06-08 at 14.33.26@2x.png

Add REST credentials to Val Town environment variables

  1. Go to val.town/settings/environment-variables
  2. For UPSTASH_REDIS_REST_URL and the UPSTASH_REDIS_REST_TOKEN each:
    1. Click New env variable.
    2. Set the names to upstashURL and upstashToken, respectively
    3. Copy & paste in the value
    4. Click Add

Upstash:

Screenshot 2023-06-08 at 14.38.01@2x.png

Val Town:

Screenshot of adding a new environment variable to Val Town

Set some data

If you set it up correctly, you should be able to Run this Val and have it return the same results from your own Upstash database

Saving dataRun in Val Town ↗
import { Redis } from "npm:@upstash/redis";
const redis = new Redis({
url: Deno.env.get("upstashURL"),
token: Deno.env.get("upstashToken"),
});
console.log(await redis.set("foo", "bar"));
console.log(await redis.get("foo"));

Saving JSON

JSON is automatically stringified and parsed so you can set it and get it directly. You can store a JSON object of up to 1mb this way with a free acount.

Saving JSON valueRun in Val Town ↗
import { Redis } from "npm:@upstash/redis";
const redis = new Redis({
url: Deno.env.get("upstashURL"),
token: Deno.env.get("upstashToken"),
});
await redis.set("json-ex-1", { a: { b: "nested json" } });
console.log(((await redis.get("json-ex-1")) as any).a.b);

Further resources

  1. Upstash Redis SDK Docs
  2. Redis tutorial

Thanks to @mattx for contributions to this resource!