Managing data sources
Caching
We're working on it...
Caching requests
By default, Orbital will cache requests throughout a query only. ie., Orbital will only call a service with the same set of parameters once within a query.
However, caches are destroyed at the end of each query.
To enable caching, simply add @Cache
to the top of your query:
@Cache
find { Film[] } as {
id : FilmId
// Fetched from a remote service.
// Calls will be cached.
currentReviewScore : ReviewScore
}
Scoping caches
By default, all queries share the same cache. If you want cache isolation, so that population and invalidation are isolated from each other, you can apply a name to the cache:
@Cache("myCache")
find { Film[] } as {
id : FilmId
// Fetched from a remote service.
// Calls will be cached.
currentReviewScore : ReviewScore
}
Using Orbital's local cache
Orbital’s local cache runs in-process within Orbital.
It’s the default cache that’s enabled if no connection is provided.
It’s helpful for development, but shouldn’t be taken to production, as excessive caching can cause Out-of-Memory failures and degrade performance.
// This query uses the default, local cache
@Cache
find { Film[] } as {
id : FilmId
// Fetched from a remote service
currentReviewScore : ReviewScore
}
Cache TTL
Orbital’s internal cache contains a TTL of 5 minutes.
This can’t currently be configured, as the cache is not intended for production use.
Using an external cache
Orbital supports external caches, and will run a near-cache in-process, offloading to the remote cache as the library supports.
To enable a remote cache, first define a connection to the cache in your connections.conf
file, then specify
the name of the connection in your query.
hazelcast {
myHazelcast {
connectionName = myHazelcast
addresses = ["localhost:5701"]
}
}
@Cache(connection = "myHazelcast")
find { Film[] } as {
id : FilmId
// Fetched from a remote service
currentReviewScore : ReviewScore
}
Supported caches
Orbital supports caching with the following platforms:
- Hazelcast
- Redis
If you need cache not listed, please reach out on slack
Cache TTL
The default Cache TTL is defined in the connections file:
hazelcast {
myHazelcast {
connectionName = myHazelcast
addresses = ["localhost:5701"]
ttl = 20 minutes
}
}
max-age headers
Orbital will honour max-age headers when caching responses from HTTP services:
Setting the cache-control: max-age=
header will cause the entry to be automatically evicted after the max-age
expires.