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 copy & paste this Val and have it return the same results from your own Upstash database

import process from "node:process";
export const upstashEx = (async () => {
const { Redis } = await import("npm:@upstash/redis");
const redis = new Redis({
url: process.env.upstashURL,
token: process.env.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.

import process from "node:process";
export const upstashJSONEx = (async () => {
const { Redis } = await import("npm:@upstash/redis");
const redis = new Redis({
url: process.env.upstashURL,
token: process.env.upstashToken,
});
await redis.set("json-ex-1", { a: { b: "nested json" } });
return ((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!