# Storage

{% hint style="warning" %}
**This is the manual for older MicroStream versions (Version < 5.0).**

**The new documentation (Version >= 5.0) is located at:**

[https://docs.microstream.one/](https://docs.microstream.one/manual)
{% endhint %}

MicroStream's storage can be used as a backing store for the cache. It functions as a CacheWriter as well as a CacheReader, depending on the writeThrough and readThrough configuration. Per default it is used for both.

```java
EmbeddedStorageManager storageManager = EmbeddedStorage.start();
CachingProvider        provider       = Caching.getCachingProvider();  
CacheManager           cacheManager   = provider.getCacheManager();   
CacheConfiguration<Integer, String> configuration = CacheConfiguration
			.Builder(Integer.class, String.class, "my-cache", storageManager)
			.build(); 
Cache<Integer, String> cache = cacheManager.createCache("jCache", configuration);
```

If you prefer an external configuration, you can link the [storage configuration](https://manual.docs.microstream.one/data-store/configuration#external-configuration):

{% tabs %}
{% tab title="cache-config.properties" %}

```
keyType = java.lang.Integer
valueType = java.lang.String

readThrough = true
writeThrough = true

storageConfigurationResourceName = microstream-storage.properties
```

{% endtab %}

{% tab title="microstream-storage.properties" %}

```
baseDirectory = ~/cache-data
channelCount = 4
```

{% endtab %}
{% endtabs %}

Or you can embed the storage configuration using the `storage.` prefix:

{% code title="cache-config.properties" %}

```
keyType = java.lang.Integer
valueType = java.lang.String

readThrough = true
writeThrough = true

storage.baseDirectory = ~/cache-data
storage.channelCount = 4
```

{% endcode %}

Spring example:

{% tabs %}
{% tab title="application.properties" %}

```
spring.jpa.properties.hibernate.cache.microstream.missing_cache_strategy = create
spring.jpa.properties.hibernate.cache.microstream.readThrough = true
spring.jpa.properties.hibernate.cache.microstreamwriteThrough = true
spring.jpa.properties.hibernate.cache.microstream.storage.baseDirectory = ~/cache-data
spring.jpa.properties.hibernate.cache.microstream.storage.channelCount = 4
spring.jpa.properties.hibernate.cache.region.factory_class = one.microstream.cache.hibernate.CacheRegionFactory
spring.jpa.properties.hibernate.cache.use_query_cache = true
spring.jpa.properties.hibernate.cache.use_second_level_cache = true
```

{% endtab %}

{% tab title="application.yml" %}

```yaml
spring:
    jpa:
        properties:
            hibernate:
                cache:
                    microstream:
                        missing_cache_strategy: create
                        readThrough: true
                        writeThrough: true
                        storage:
                            baseDirectory: ~/cache-data
                            channelCount: 4
                    region:
                        factory_class: one.microstream.cache.hibernate.CacheRegionFactory
                    use_query_cache: true
                    use_second_level_cache: true
```

{% endtab %}
{% endtabs %}
