---
id: platform/recovery-keyvalue
title: "Recovery drill: Key Value"
description: Seed a paid Key Value RDB into a new Valkey instance in a restore-* namespace and verify a key after AOF rewrite.
keywords: [bex, recovery, key value, rdb, valkey]
last_updated: 2026-09-23
---

# Recovery drill: Key Value

Use `scripts/restore-keyvalue.sh` (see [Platform recovery rehearsals](./recovery.md)).
The script has **no** in-place mode: it always creates a new `restore-*`
namespace and empty PVC, loads a checksum-validated RDB once with AOF disabled,
rewrites AOF, and verifies after rollout.

## Prepare

- Paid Key Value instance id (`--id red-…`).
- A decryptable RDB object (`--snapshot latest` or explicit `s3://…`).
- A `--verify-key` (and optional `--expect`) known to exist in that snapshot.

## DRY_RUN

```bash
cd /path/to/bex
DRY_RUN=1 scripts/restore-keyvalue.sh \
  --id red-EXAMPLE \
  --target-namespace restore-kv-drill \
  --verify-key myapp:ready \
  --snapshot latest
```

## Restore

```bash
scripts/restore-keyvalue.sh \
  --id red-EXAMPLE \
  --target-namespace restore-kv-drill \
  --verify-key myapp:ready \
  --expect 1 \
  --snapshot latest \
  --confirm restore-kv-drill \
  --teardown-on-success
```

Throwaway passwords are generated for the drill and never printed on argv.

## Verify and clean up

Confirm the verify-key expectation passed. Tear down with
`--teardown restore-kv-drill --confirm restore-kv-drill` if needed.
