Skip to main content

Caching

The GraphQL API server provided by @subsquid/graphql-server supports caching via additional flags. It is done on a per-query basis. The whole response is cached for a specified amount of time (maxAge).

To enable caching when deploying to SQD Cloud, add the caching flags to the serve:prod command definition at commands.json, then use that command to run the server in the deployment manifest. Cloud currently supports only in-memory cache. For example, snippets below will deploy a GraphQL API server with a 100Mb in-memory cache and invalidation time of 5 seconds:

commands.json
...
"serve:prod": {
"description": "Start the GraphQL API server with caching and limits",
"cmd": [ "squid-graphql-server",
"--dumb-cache", "in-memory",
"--dumb-cache-ttl", "5000",
"--dumb-cache-size", "100",
"--dumb-cache-max-age", "5000" ]
}
...
squid.yaml
# ...
deploy:
# other services ...
api:
cmd: [ "sqd", "serve:prod" ]

Caching flags list is available via npx squid-graphql-server --help. Here are some more details on them:

--dumb-cache <cache-type>

Enables cache, either in-memory or redis. For redis, a Redis connection string must be set by a variable REDIS_URL. SQD Cloud deployments currently support only in-memory cache.

--dumb-cache-size <mb>

Cache max size. Applies only to in-memory cache.

--dumb-cache-max-age <ms>

A globally set max age in milliseconds. The cached queries are invalidated after that period of time.

--dumb-cache-ttl <ms>

Time-to-live for in-memory cache entries. Applies only to in-memory cache. The entries are eligible for eviction from the cache if not updated for longer than the time-to-live time.