# Getting Started

{% 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 %}

## Prerequisites

{% code title="pom.xml" %}

```markup
<repositories>
    <repository>
        <id>microstream-releases</id>
        <url>https://repo.microstream.one/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>one.microstream</groupId>
        <artifactId>cache</artifactId>
        <version>04.01.00-MS-GA</version>
    </dependency>
</dependencies>
```

{% endcode %}

## Hello World

```java
CachingProvider provider     = Caching.getCachingProvider();  
CacheManager    cacheManager = provider.getCacheManager();   
MutableConfiguration<Integer, String> configuration = new MutableConfiguration<>()  
    .setTypes(Integer.class, String.class)   
    .setStoreByValue(false)   
    .setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ONE_MINUTE));  
Cache<Integer, String> cache = cacheManager.createCache("jCache", configuration); 
cache.put(1, "Hello World"); 
String value = cache.get(1); 
```

1\)  Get the default `CachingProvider` implementation from the application’s classpath. This method will work if and only if there is only one JCache implementation available in the classpath. If there are multiple providers then use the fully qualified name\
`Caching.getCachingProvider("one.microstream.cache.CachingProvider")` \
instead.

2\)  Get the default `CacheManager` instance using the provider.

3\)  Create a cache configuration using `MutableConfiguration`\
&#x20;   4\) with key type and value type as `Integer` and `String` respectively\
&#x20;   5\) configured to store the cache entries by reference (not by value)\
&#x20;   6\) and with an expiry time of one minute defined for entries from the moment they are created.

7\)  Using the cache manager, create a cache named `jCache` with the configuration created in step 3.

8\) Put some data into the cache

9\) And retrieve it.

The same can be done using MicroSteam's `CacheConfiguration` API. This time we use a `EmbeddedStorageManager` as a backing store for the cache.

```java
EmbeddedStorageManager storageManager = EmbeddedStorage.start();
CachingProvider provider     = (one.microstream.cache.CachingProvider)Caching.getCachingProvider();  
CacheManager    cacheManager = provider.getCacheManager();   
CacheConfiguration<Integer, String> configuration = CacheConfiguration
			.Builder(Integer.class, String.class, "jCache", storageManager)
			.expiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ONE_HOUR))
			.build();  
Cache<Integer, String> cache = cacheManager.createCache("jCache", configuration); 
cache.put(1, "one"); 
String value = cache.get(1); 
```
