# Cache

Each Mechanic account has a simple key-value cache, which may be written to using [Cache](https://learn.mechanic.dev/core/actions/cache) actions, and read from using the [cache object](https://learn.mechanic.dev/platform/liquid/objects/cache) and [cache endpoints](https://learn.mechanic.dev/platform/cache/endpoints).

{% hint style="info" %}
Cache data is unavailable during [task preview](https://learn.mechanic.dev/core/tasks/previews).
{% endhint %}

## Restrictions

Cache keys must match `/\A[a-z0-9_:-.\/]+\z/i`; that is, they must only contain alphanumeric characters, plus any of the following characters: `_:-./`.

The cache is intended for temporary data storage. As such, each stored value is persisted for a maximum of 60 days. (Shorter expiration periods can be set using the Cache action's "ttl" option.)

The cache is not intended for large value storage. As such, each stored value is limited to a maximum of 256kb.

For storing larger values, consider spreading the value across multiple cache keys, or using the [FTP](https://learn.mechanic.dev/core/actions/ftp) action to upload data to another storage service (possibly using a service like [Couchdrop](https://couchdrop.io/) as a intermediary). To read larger values in task code, use the [HTTP](https://learn.mechanic.dev/core/actions/http) action to perform a GET request, then [respond to the action's results](https://learn.mechanic.dev/techniques/responding-to-action-results).

## Common patterns

The cache is a versatile tool — here are some of the ways it's commonly used:

* [Debouncing events](https://learn.mechanic.dev/techniques/debouncing-events) — use the cache to skip duplicate events that arrive in rapid succession
* [Batch processing of events](https://learn.mechanic.dev/techniques/batch-processing-of-events) — accumulate data in the cache across multiple events, then process it all at once on a schedule
* [Responding to action results](https://learn.mechanic.dev/techniques/responding-to-action-results) — store state across the multiple task runs in a multi-step workflow
