The Amplify Cache module provides a generic [LRU](https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_Recently_Used_.28LRU.29) cache for JavaScript developers to store data with priority and expiration settings. It is a key/value structure where expiration values can be configured **globally** or on a **per-key basis**. For instance, you may wish to cache all JSON responses from the API module for the next 10 minutes, but like to store user input values or preferences for a month. ## Installation Install `aws-amplify`. ```bash npm install aws-amplify ``` ## Working with the API First, import the library: ```javascript import { Cache } from 'aws-amplify'; ``` After the import, you can invoke the appropriate methods within your application. ### setItem() ```javascript Cache.setItem(key, value, [options]); ``` You can set *number*, *string*, *boolean*, *array* or *object* values to the cache. You can also specify options along with the call such as the priority or expiration time. ```javascript // Standard case Cache.setItem('key', 'value'); // Set item with priority. Priority should be between 1 and 5. Cache.setItem('key', 'value', { priority: 3 }); // Set item with an expiration time const expiration = new Date(2018, 1, 1); Cache.setItem('key', 'value', { expires: expiration.getTime() }); ``` When using `priority` setting, the cached item with the higher number will be expired first. The Cache module decides expiration based on the memory available to the cache. In the following example,`breakfastFoodOrder` will be expired before `mothersBirthday`. ```javascript Cache.setItem('mothersBirthday', 'July 18th', { priority: 1 }); Cache.setItem('breakfastFoodOrder', 'Pancakes', { priority: 3 }); ``` ### getItem() ```javascript Cache.getItem(key[, options]); ``` Retrieves an item from the cache. It will return null if the item doesn’t exist or it has expired. ```javascript // Standard case Cache.getItem('key'); // Get item with callback function. // The callback function will be called if the item is not in the cache. // After the callback function returns, the value will be set into cache. Cache.getItem('key', { callback: callback }); ``` ### removeItem() Removes item from cache. ```javascript Cache.removeItem(key); ``` ### clear() Removes all of the items in the cache. ```javascript Cache.clear(); ``` ### getAllKeys() Returns all of the keys available in the cache. ```javascript Cache.getAllKeys(); ``` ### getCacheCurSize() Returns the current size of the cache in bytes. ```javascript const size = Cache.getCacheCurSize(); ``` ### configure() Configures default settings for `setItem` functionality. You can see all available options in [Configuration](#configuration) section. ```javascript const config = { itemMaxSize: 3000, // 3000 bytes defaultPriority: 4 // ... }; const myCacheConfig = Cache.configure(config); // You can modify parameters such as cache size, item default ttl and etc. // But don't try to modify keyPrefix which is the identifier of Cache. ``` ### createInstance() Creates a new instance of Cache with custom configuration. ```javascript const config = { itemMaxSize: 3000, // 3000 bytes storage: window.sessionStorage // switch to sessionStorage // ... }; const newCache = Cache.createInstance(config); // Please provide a new keyPrefix which is the identifier of Cache. ``` ## API Reference For the complete API documentation for Cache module, visit our [API Reference](https://aws-amplify.github.io/amplify-js/api/classes/cacheobject.html) ## Configuration ### Configuration Parameters Here is the list of configuration parameters for the Cache module: | **Parameter** | **Type** | **Description** | |---|---|--- | keyPrefix | *string* | The ID of Cache which can only be configured when creating new instance. | | capacityInBytes | *number* | Max size of Cache in bytes. By default is 1MB and has a maximum of 5MB. | | itemMaxSize | *number* | Max size of individual item which can be set into Cache in bytes. The default value is 200KB. | | defaultTTL | *number* | TTL for the cache items in milliseconds. The default value is 72 hours. | | defaultPriority | *number* | Default priority of the cache items. The default value is 5, the highest priority is 1. | | warningThreshold | *number* | This is for keeping Cache's current capacity in a reasonable level. The default is 0.8, which sets warnings for 80% of space usage. | | storage | *StorageType* | The storage medium that will be used for the Cache. Supported values are *LocalStorage*(default) and *SessionStorage* for Web development and *AsyncStorage* for React Native. | ### Configuration Parameters for Items Here is the list of configuration parameters for the items in the cache : | **Parameter** | **Type** | **Description** | |---|---|--- | priority|*number*| Priority of the item to be kept in cache. Higher priority means longer expiration time.| | expires |*number*|The expiration time of the cache item in milliseconds.| | callback | *function* | You can provide a callback function with getItem() to implement cache miss scenarios. The provided function will only be called if there is not a match for the cache key, and the return value from the function will be assigned as the new value for the key in cache. |