Before you begin
- A FastAPI project deployed on Sevalla, as in Deploy FastAPI.
Create a Redis database
1
Create the database
In the sidebar, click Databases, then click Create database. Under Database, choose Redis, or Valkey: the code in this guide works with both. Enter
storefront-redis as the Display name, choose the same Data center as the application and a Size, then click Create database.2
Connect it to the application
In the sidebar, click Applications, then click the application. Click the Networking tab. Under Connected services, click Add internal connection. Choose
storefront-redis as the Service, turn on Add environment variables to the application, and click Add internal connection. Sevalla adds REDIS_HOST, REDIS_PORT, REDIS_PASSWORD and REDIS_URL. See Connect an application.

Connect to Redis
Install redis-py and updaterequirements.txt:
storefront/main.py, replace app = FastAPI():
storefront/main.py
Cache a response
Read from the cache first, and store a fresh result for 2 minutes when it’s empty:storefront/main.py
Verify
Request the route twice, with your application’s domain:generated_at. After 2 minutes, the next request shows a new time. To look at the key, open the Redis database and click the Redis studio tab. See Database studio.
Control the CDN and edge cache
Sevalla can also cache responses at Cloudflare’s edge, in front of the application. Turn on the CDN and edge caching on the application’s Networking tab; see CDN and edge caching.- The CDN caches static files by file extension, such as
.css,.jsand images. - Edge caching caches pages and other responses too. It caches only
GETrequests, skips requests with anAuthorizationheader, and doesn’t store responses that set a cookie. - When a response has no
Cache-Controlheader, Sevalla adds one. With edge caching on, a200response without its own header can stay cached for up to 30 days, unless a deployment or a purge clears the cache first. See Control caching from your application.
Cache-Control on every route. no-store keeps a response out of every cache, and max-age sets how long it may be kept:
storefront/main.py
curl -s -D - -o /dev/null https://storefront-x7k2m.sevalla.app/catalog and read the Cache-Control header. (curl -I sends a HEAD request, which a FastAPI GET route answers with 405.)