> ## Documentation Index
> Fetch the complete documentation index at: https://developer.upsun.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Valkey is now available

export const PostMeta = ({data = {}}) => {
  const {author, date, image} = data;
  const authors = Array.isArray(author) ? author : author ? [author] : [];
  const resolveAuthor = slug => {
    const entry = AUTHOR_MAP[slug] || ({});
    const name = entry.name || slug;
    const github = entry.github || null;
    const linkedin = entry.linkedin || null;
    const url = github ? `https://github.com/${github}` : linkedin || null;
    const avatarUrl = github ? `https://github.com/${github}.png?size=64` : null;
    return {
      name,
      url,
      avatarUrl
    };
  };
  const formattedDate = date ? new Date(date).toLocaleDateString('en-US', {
    year: 'numeric',
    month: 'long',
    day: 'numeric'
  }) : null;
  if (!image && authors.length === 0 && !formattedDate) return null;
  const AUTHOR_MAP = {
    "aaron-collier": {
      "name": "Aaron Collier"
    },
    "aaron-dudenhofer": {
      "name": "Aaron Dudenhofer"
    },
    "aaron-porter": {
      "name": "Aaron Porter"
    },
    "adriaan-odendaal": {
      "name": "Adriaan Odendaal"
    },
    "ajmal": {
      "name": "Ajmal Siddiqui"
    },
    "akalipetis": {
      "name": "Antonis Kalipetis"
    },
    "alexander-varwijk": {
      "name": "Alexander Varwijk"
    },
    "alicia-bevilacqua": {
      "name": "Alicia Bevilacqua"
    },
    "amelie-deguerry": {
      "name": "Amelie Deguerry"
    },
    "anacidre": {
      "name": "Ana Cidre",
      "linkedin": "https://www.linkedin.com/in/ana-cidre"
    },
    "andoni": {
      "name": "Andoni Auzmendi"
    },
    "andrei-taranu": {
      "name": "Andrei (Alex) Taranu",
      "linkedin": "https://www.linkedin.com/in/andrei-alex-taranu/"
    },
    "andrew-baxter": {
      "name": "Andrew Baxter"
    },
    "andrew-melck": {
      "name": "Andrew Melck"
    },
    "antoine-crochet-damais": {
      "name": "Antoine Crochet Damais"
    },
    "augustin-delaporte": {
      "name": "Augustin Delaporte",
      "linkedin": "https://www.linkedin.com/in/augustindelaporte/"
    },
    "branislav-bujisic": {
      "name": "Branislav Bujisic"
    },
    "carl-smith": {
      "name": "Carl Smith"
    },
    "caroline-leroy": {
      "name": "Caroline Leroy"
    },
    "cati-mayer": {
      "name": "Cati Mayer"
    },
    "catplat": {
      "name": "C Trinkwon"
    },
    "ceelolulu": {
      "name": "Celeste van der Watt"
    },
    "chadwcarlson": {
      "name": "Chad Carlson",
      "github": "chadwcarlson",
      "linkedin": "https://www.linkedin.com/in/chadwcarlson"
    },
    "chris-ward": {
      "name": "Chris Ward"
    },
    "chris-yates": {
      "name": "Chris Yates"
    },
    "christian-sieber": {
      "name": "Christian Sieber"
    },
    "christopher-lockheardt": {
      "name": "Christopher Lockheardt"
    },
    "christopher-skene": {
      "name": "Christopher Skene"
    },
    "chuck-morgan": {
      "name": "Chuck Morgan"
    },
    "corey-dockendorf": {
      "name": "Corey Dockendorf"
    },
    "crell": {
      "name": "Crell"
    },
    "damz": {
      "name": "Damz"
    },
    "dan-morrison": {
      "name": "Dan Morrison"
    },
    "davidbonachera": {
      "name": "David Bonachera",
      "github": "davidbonachera",
      "linkedin": "https://www.linkedin.com/in/davidbonachera"
    },
    "dereliahmet1": {
      "name": "Ahmet Faruk Dereli"
    },
    "devicezero": {
      "name": "Jonas Kröger",
      "github": "devicezero",
      "linkedin": "https://www.linkedin.com/in/jonaskroeger/"
    },
    "doug-goldberg": {
      "name": "Doug Goldberg"
    },
    "duncan-naves": {
      "name": "Duncan Naves",
      "github": "duncannaves",
      "linkedin": "https://www.linkedin.com/in/duncan-naves-a94423aa"
    },
    "erika-bustamante": {
      "name": "Erika Bustamante"
    },
    "fabpot": {
      "name": "Fabien Potencier"
    },
    "flovntp": {
      "name": "Florent Huck",
      "github": "flovntp",
      "linkedin": "https://www.linkedin.com/in/florenthuck"
    },
    "fred-plais": {
      "name": "Fred Plais"
    },
    "gauthier-garnier": {
      "name": "Gauthier Garnier"
    },
    "gilzow": {
      "name": "Paul Gilzow"
    },
    "gmoigneu": {
      "name": "Guillaume Moigneu",
      "github": "gmoigneu",
      "linkedin": "https://www.linkedin.com/in/guillaumemoigneu/"
    },
    "gregqualls": {
      "name": "Greg Qualls"
    },
    "guguss": {
      "name": "Augustin Delaporte"
    },
    "haylee-millar": {
      "name": "Haylee Millar"
    },
    "ivana-kotur": {
      "name": "Ivana Kotur"
    },
    "jackrabbithanna": {
      "name": "Mark Hanna"
    },
    "jared-wright": {
      "name": "Jared Wright",
      "github": "jww-sh",
      "linkedin": "https://www.linkedin.com/in/jaredwaynewright"
    },
    "jessica-orozco": {
      "name": "Jessica Orozco"
    },
    "joey-stanford": {
      "name": "Joey Stanford"
    },
    "john-grubb": {
      "name": "John Grubb"
    },
    "jonas-kruger": {
      "name": "Jonas Kruger"
    },
    "kathryn-frazer": {
      "name": "Kathryn Frazer"
    },
    "kemiojo": {
      "name": "Kemi Elizabeth Ojogbede"
    },
    "kieronsambrook-smith": {
      "name": "Kieronsambrook Smith"
    },
    "laurent-arnoud": {
      "name": "Laurent Arnoud",
      "linkedin": "https://www.linkedin.com/in/laurent-arnoud-861b44121/"
    },
    "letoya-boyne": {
      "name": "Letoya Boyne"
    },
    "lolautruche": {
      "name": "Jérôme Vieilledent"
    },
    "lyly-lepinay": {
      "name": "Lyly Lepinay"
    },
    "manauwar-alam": {
      "name": "Manauwar Alam"
    },
    "marc-antoine-porri": {
      "name": "Marc Antoine Porri"
    },
    "maria-antinkaapo": {
      "name": "Maria Antinkaapo"
    },
    "maria-de-anton": {
      "name": "Maria De Anton"
    },
    "mark-dorison": {
      "name": "Mark Dorison"
    },
    "markus-hausammann": {
      "name": "Markus Hausammann"
    },
    "mary-thomas": {
      "name": "Mary Thomas"
    },
    "mathias-bolt-lesniak": {
      "name": "Mathias Bolt Lesniak"
    },
    "mathieu-strauch": {
      "name": "Mathieu Strauch"
    },
    "matthias-van-woensel": {
      "name": "Matthias Van Woensel",
      "linkedin": "https://www.linkedin.com/in/matthias-van-woensel-267a069"
    },
    "michael-sharp": {
      "name": "Michael Sharp"
    },
    "mupsi": {
      "name": "Marine Gandy"
    },
    "natalie-harper": {
      "name": "Natalie Harper"
    },
    "ngommenginger": {
      "name": "Nicolas Gommenginger",
      "linkedin": "https://www.linkedin.com/in/nicolas-gommenginger"
    },
    "nicholas-bennison": {
      "name": "Nicholas Bennison"
    },
    "nicholas-vahalik": {
      "name": "Nicholas Vahalik"
    },
    "nick-hardiman": {
      "name": "Nick Hardiman"
    },
    "nickanderegg": {
      "name": "Nickanderegg"
    },
    "nicolas-grekas": {
      "name": "Nicolas Grekas",
      "github": "nicolas-grekas",
      "linkedin": "https://www.linkedin.com/in/nicolasgrekas/"
    },
    "niti-malwade": {
      "name": "Niti Malwade"
    },
    "opensocialteam": {
      "name": "Opensocialteam"
    },
    "ori-pekelman": {
      "name": "Ori Pekelman"
    },
    "otavio-santana": {
      "name": "Otavio Santana"
    },
    "palwandi": {
      "name": "Pawan Alwandi",
      "github": "pawpy",
      "linkedin": "https://www.linkedin.com/in/pawanalwandi"
    },
    "patrick-boest": {
      "name": "Patrick Boest"
    },
    "patrick-dawkins": {
      "name": "Patrick Dawkins",
      "github": "pjcdawkins",
      "linkedin": "https://www.linkedin.com/in/patrickdawkins"
    },
    "patrick-klima": {
      "name": "Patrick Klima"
    },
    "pjcdawkins": {
      "name": "Pjcdawkins"
    },
    "prineet-kaurbhurji": {
      "name": "Prineet Kaurbhurji"
    },
    "quentin-sinig": {
      "name": "Quentin Sinig"
    },
    "ralt": {
      "name": "Florian Margaine",
      "github": "ralt",
      "linkedin": "https://www.linkedin.com/in/florian-margaine-43971136"
    },
    "ramanathanramakrishnamurthy": {
      "name": "Ramanathanramakrishnamurthy"
    },
    "remi-lejeune": {
      "name": "Rémi Lejeune"
    },
    "ribel": {
      "name": "Taras Kruts"
    },
    "robert-douglass": {
      "name": "Robert Douglass"
    },
    "rudy-weber": {
      "name": "Rudy Weber"
    },
    "ryan-hicks": {
      "name": "Ryan Hicks"
    },
    "sabri-helal": {
      "name": "Sabri Helal"
    },
    "savannah-bergeron": {
      "name": "Savannah Bergeron"
    },
    "shannon-vettes": {
      "name": "Shannon Vettes"
    },
    "shawn-ogasawara": {
      "name": "Shawn Ogasawara",
      "linkedin": "https://www.linkedin.com/in/shawn-ogasawara-83a9a0/"
    },
    "shawna-spoor": {
      "name": "Shawna Spoor"
    },
    "shedrack-akintayo": {
      "name": "Shedrack Akintayo"
    },
    "simon-ruggier": {
      "name": "Simon Ruggier"
    },
    "sophie-van-der-kindere": {
      "name": "Sophie Van Der Kindere"
    },
    "stefanos-thampis": {
      "name": "Stefanos Thampis"
    },
    "stephen-weinberg": {
      "name": "Stephen Weinberg"
    },
    "sukhman-virk": {
      "name": "Sukhman Virk"
    },
    "sumaira-nazir": {
      "name": "Sumaira Nazir"
    },
    "sumer": {
      "name": "Sümer Cip"
    },
    "syed-raza": {
      "name": "Syed Raza"
    },
    "tamara-bacchia": {
      "name": "Tamara Bacchia"
    },
    "tara-arnold": {
      "name": "Tara Arnold"
    },
    "theosakamg": {
      "name": "Mickael Gaillard",
      "github": "theosakamg"
    },
    "thomasdiluccio": {
      "name": "Thomas di Luccio"
    },
    "tim-anderson": {
      "name": "Tim Anderson"
    },
    "tom-helmer-hansen": {
      "name": "Tom Helmer Hansen"
    },
    "tylermills": {
      "name": "Tyler Mills"
    },
    "upsun": {
      "name": "Upsun"
    },
    "veronika-tolkachova": {
      "name": "Veronika Tolkachova",
      "linkedin": "https://www.linkedin.com/in/veronika-tolkachova-169167a2"
    },
    "vince-parker": {
      "name": "Vince Parker"
    },
    "vinnie-russo": {
      "name": "Vincenzo Russo"
    },
    "vrobert78": {
      "name": "Vincent Robert",
      "github": "vrobert78",
      "linkedin": "https://www.linkedin.com/in/vincent-robert-498a883"
    },
    "yuriy-babenko": {
      "name": "Yuriy Babenko"
    },
    "yuriy-gerasimov": {
      "name": "Yuriy Gerasimov"
    }
  };
  return <div className="post-meta">
      {(authors.length > 0 || formattedDate) && <div className="post-meta-info">
          {authors.length > 0 && <div className="post-meta-authors">
              {authors.map(slug => {
    const {name, url, avatarUrl} = resolveAuthor(slug);
    const inner = <>
                    {avatarUrl && <img src={avatarUrl} alt={name} className="post-meta-avatar" />}
                    <span className="post-meta-author-name">{name}</span>
                  </>;
    return url ? <a key={slug} href={url} target="_blank" rel="noopener noreferrer" className="post-meta-author">
                    {inner}
                  </a> : <span key={slug} className="post-meta-author">{inner}</span>;
  })}
            </div>}
          {authors.length > 0 && formattedDate && <span className="post-meta-separator" aria-hidden="true">·</span>}
          {formattedDate && <span className="post-meta-date">{formattedDate}</span>}
        </div>}
      {image && <img src={image} alt="" className="post-meta-image" aria-hidden="true" />}
    </div>;
};

<PostMeta data={{ author: ["remi-lejeune"], date: "2025-04-16T09:34:22-05:00", image: "/images/posts/releases/valkey-release/valkey.webp" }} />

We're excited to announce the availability of [Valkey](https://valkey.io/), a high-performance, open-source key/value database, now offered as a managed service on Upsun. Valkey serves as a drop-in alternative to Redis, particularly relevant following recent licensing changes to the Redis project.

If you're looking for a seamless transition from Redis or starting a new project requiring a fast key-value store, Valkey is ready for you.

## Why a Redis Alternative? The licensing context

On March 20, 2024, Redis Ltd. [announced](https://redis.io/blog/redis-adopts-dual-source-available-licensing/) a shift to a dual-license model: RSALv2 (Redis Source Available License v2) and SSPL (Server Side Public License v1). Similar moves were previously made by MongoDB and Elasticsearch.

The SSPL, in particular, poses challenges for cloud providers like Upsun and Platform.sh.
It requires providers offering the software as a service to release the source code of *all* management and supporting software. This would include substantial parts of the Upsun platform stack, which is not feasible for us.

This licensing change left us with two potential paths:

1. Offer newer Redis versions under a premium commercial license.
2. Provide an open-source alternative (a "fork").

We explored a commercial agreement with Redis Ltd. that would have allowed us to offer newer versions, but we were not able to find a solution. Therefore, we focused on identifying the best open-source alternative for our users.

## Choosing Valkey

The landscape of Redis alternatives includes projects like [Valkey](https://valkey.io/), [Redict](https://redict.io/), [KeyDB](https://docs.keydb.dev/), [Dragonfly](https://www.dragonflydb.io/), and [Garnet](https://microsoft.github.io/garnet/), each with its own strengths. Our decision process prioritized several key factors:

* **License:** Must be genuinely open-source and compatible with our service model.
* **Governance & Community:** Strong backing from a diverse community and major tech companies ensures longevity and vendor neutrality. A transparent governance model is crucial.
* **Project Vitality:** Active development, regular releases, and responsiveness to security issues.
* **Compatibility:** Minimal to no code changes required for applications currently using Redis. Compatibility with existing infrastructure (like Redis Sentinel for High Availability) is a major plus.

After careful evaluation and monitoring the developments following the Redis license change, **Valkey emerged as the clear choice.**

* **Open Source & Governance:** Valkey is licensed under the permissive BSD 3-Clause license and is part of the Linux Foundation.
* **Strong Backing:** It has garnered support from major industry players including AWS, Google Cloud, Oracle, Ericsson, and Snap Inc., ensuring robust development and a healthy future.
* **Compatibility:** Valkey originated as a fork of Redis 7.2.4, ensuring a high degree of compatibility with the Redis API and client libraries. It aims to be a drop-in replacement for many use cases.

# Valkey on Upsun and Platform.sh: key details

Valkey is available now across all Upsun and Platform.sh. Here’s what you need to know:

* **Availability:** Ready to use on all Upsun and Platform.sh projects.
* **Two services:**
  * `valkey`: An ephemeral, in-memory store where data is lost on restart (equivalent to redis).
  * `valkey-persistent`: Stores data on disk, ensuring data persistence across container restarts (equivalent to redis-persistent).
* **Supported Version:** We currently offer **Valkey 8.0.x**. Minor versions (e.g., 8.0.1, 8.0.2) will be updated automatically to include the latest security patches and bug fixes.

### Getting Started with Valkey

Using Valkey in your Upsun or Platform.sh project is straightforward.

<Tabs>
  <Tab title="Upsun">
    First define the Valkey service in your `.upsun/config.yaml` configuration file and add a relationship from your app to the Valkey service:

    ```yaml {filename=".upsun/config.yaml",linenos=table,hl_lines=["2-7", "11-14"],linenostart=1} theme={null}
    services:
      # Define a persistent Valkey cache service
      myvalkeycache:
        type: valkey-persistent:8.0
      # Or define an ephemeral Valkey service
      # myephemeralcache:
      #   type: valkey:8.0
    applications:
      app:
        relationships:
          # Name the relationship endpoint as needed by your application
          valkeycache: "myvalkeycache:valkey"
          # Or for the ephemeral service:
          # ephemeralcache: "myephemeralcache:valkey"
    ```

    You then need to deploy your updates on your [preview environment](https://docs.upsun.com/glossary.html#preview-environment), using the following command line:

    ```shell {filename="Terminal"} theme={null}
    git add .upsun/config.yaml
    git commit -m "Add Valkey service"
    upsun push
    ```
  </Tab>

  <Tab title="Platform.sh">
    First add a Valkey service in your `platform/services.yaml` with the following:

    ```yaml {filename=".platform/services.yaml",linenos=table,hl_lines=["2-4", "6-7"],linenostart=1} theme={null}
    # Define a persistent Valkey cache service
    myvalkeycache:
        type: valkey-persistent:8.0
        disk: 256 # Specify disk size in MB for persistent storage
    # Or define an ephemeral Valkey service
    # myephemeralcache:
    #     type: valkey:8.0
    ```

    And add the corresponding relationship in your `.platform.app.yaml`

    ```yaml {filename=".platform.app.yaml",linenos=table,hl_lines=["2-5"],linenostart=1} theme={null}
    relationships:
        # Name the relationship endpoint as needed by your application
        valkeycache: "myvalkeycache:valkey"
        # Or for the ephemeral service:
        # ephemeralcache: "myephemeralcache:valkey"
    ```

    You then need to deploy your updates on your [preview environment](https://docs.platform.sh/glossary.html#preview-environment), using the following command line:

    ```shell {filename="Terminal"} theme={null}
    git add .platform/services.yaml .platform.app.yaml
    git commit -m "Add Valkey service"
    platform push
    ```
  </Tab>
</Tabs>

Your application can then connect using standard Redis clients, pointing to the relationship defined (e.g., `valkeycache`).

### Migrating from Redis persistent

It’s possible to switch from `redis-persistent` to `valkey-persistent` , as detailed in the [Upsun documentation](https://docs.upsun.com/add-services/valkey.html#migrate-from-redis-to-valkey) and the [Platform.sh documentation](https://docs.platform.sh/add-services/valkey.html#migrate-from-redis-to-valkey).

## The Future of Redis on Upsun and Platform.sh

Due to the licensing changes, **Upsun and Platform.sh will not be offering Redis versions newer than 7.2 (e.g., Redis 7.4, 8.0, etc.).**

However, **Redis 7.2 will remain available** as a service option on Upsun and Platform.sh for the foreseeable future.
We will continue to apply security patches and minor updates to the 7.2 branch as long as they are provided upstream under the old license.

There are **no immediate plans to deprecate the Redis 7.2 service or force migrations**.

## Conclusion

Valkey provides a robust, performant, and truly open-source alternative to Redis, backed by a strong community and major industry players. By offering Valkey as a managed service, Upsun and Platform.sh ensures you have access to a leading key-value store solution without navigating complex licensing issues.

We encourage you to explore Valkey for your caching and data store needs on Upsun or Platform.sh.
Check our [Upsun Valkey documentation](https://docs.upsun.com/add-services/valkey.html) (or [Platform.sh Valkey documentation](https://docs.platform.sh/add-services/valkey.html))
for more configuration details and keep an eye out for updates on the persistent data migration tool.

If you have any questions, please don't hesitate to reach out to us on the [Upsun Community Forum](https://community.upsun.com/).
