> For the complete documentation index, see [llms.txt](https://docs.coherence.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coherence.io/hosting/coherence-cloud/coherence-cloud-apis/key-value-store.md).

# Key-Value Store (Legacy)

{% hint style="warning" %}
This feature has been superseded by [Cloud Storage](/hosting/coherence-cloud/game-services/cloud-storage.md).
{% endhint %}

## CloudService.GameServices.KvStoreService

{% hint style="warning" %}
The player needs need to be [logged in](/hosting/coherence-cloud/authentication-service-player-accounts.md) to use the key-value store.
{% endhint %}

This class provides the methods to set, get and unset key-value pairs. This is executed within the context of the currently logged in player.

## Example

```csharp
using Coherence.Cloud;
using Coherence.Toolkit;
using System.Collections;
using UnityEngine;
using Result = Coherence.Runtime.Result;

public class KeyValueStoreExample : MonoBehaviour
{
    public CoherenceBridge bridge;

    public string username;
    public string password;
    public string myKey;
    public string myValue;

    private CloudService cloudService;

    void Start()
    {
        cloudService = bridge.CloudService;

        StartCoroutine(LoginAsAUserAndUseKvStore());
    }

    private IEnumerator LoginAsAUserAndUseKvStore()
    {
        IAuthClient authService = cloudService.GameServices.AuthService;

        while (!cloudService.IsConnectedToCloud && authService.SessionTokenRefreshResult == null)
        {
            yield return null;
        }

        // If refresh failed, we have to login as a user with the given credentials again
        if (authService.SessionTokenRefreshResult == Result.InvalidCredentials)
        {
            var task = authService.LoginWithPassword(username, password, true);

            while (!task.IsCompleted)
            {
                yield return null;
            }
        }

        // At this point, we are ready to fully utilize the Cloud Service
        KvStoreClient keyValueStore = cloudService.GameServices.KvStoreService;

        // Sets a value
        // key: lowercase letters, numbers, underscore, dash
        // val: any string (null is not allowed)
        keyValueStore.Set(myKey, myValue);

        // Gets a value
        // key: lowercase letters, numbers, underscore, dash
        var foo = keyValueStore.Get(myKey);
        Debug.Log(string.Format("foo={0}", foo)); // foo=1

        // Unsets a value, removing it from the store
        // key: lowercase letters, numbers, underscore, dash
        keyValueStore.Unset(myKey);
    }
}
```

## Limitations

**Size**: there are no limits to the number of stored key/values as long as the total size is less than **256 kB**.

**Requests**: Set/Get/Unset can be called unlimited amount of times but the execution may be throttled.
