Entity caching
The Grafbase Gateway offers caching on requests to subgraphs, known as entity caching.
You can enable caching globally via the entity_caching
config section:
[entity_caching]
enabled = true
ttl = "60s"
You can also configure different settings per subgraph:
[subgraphs.products.entity_caching]
ttl = "60s"
Cached data is scoped to avoid any data leaks between users. Currently, all the headers sent to the subgraph are used to compute the scope.
By default entity caching uses an in memory cache to store its data. To run multiple gateways and share the cache with all of them, configure the gateway to use Redis as the caching backend.
[entity_caching]
storage = "redis"
[entity_caching.redis]
url = "redis://localhost:6379"
key_prefix = "my_gateway"
- storage: The cache storage to use. Either
memory
, the default, orredis
. - url: The Redis endpoint URL. Use
redis://
for plain text protocol, orrediss://
if connecting with TLS (default:redis://localhost:6379
). - key_prefix: A string the cache uses to prefix keys in Redis (default:
grafbase-cache
).
To connect using TLS, the Redis URL must start with rediss://
. If the server
CA certificate is not in the system certificates or if you want to use mTLS,
define paths to these files in the TLS configuration.
[entity_caching.redis.tls]
cert = "/path/to/user.crt"
key = "/path/to/user.key"
ca = "/path/to/ca.crt"
- cert: The path to the mTLS user certificate file.
- key: The path to the mTLS user private key file. Must be defined together
with the
cert
. - ca: The path to the server CA certificate file.
All files must be in PEM format. The cert
and key
are not needed if the
server is not set up to use mTLS. The ca
is not needed if the certificate is
added to the system certificate storage. The certificates must be of version 3
and the server must use TLS version 1.3; everything else will be rejected by
the TLS library.
Using TLS with Redis increases response times, and the Redis server will be called at least once for every request. Consider placing the Redis server as close as possible to the gateway instances and not using TLS for the counters.