Skip to content

Instantly share code, notes, and snippets.

@michael-grunder
Created February 6, 2026 17:53
Show Gist options
  • Select an option

  • Save michael-grunder/0320dd61c16410a718de33def891b1c1 to your computer and use it in GitHub Desktop.

Select an option

Save michael-grunder/0320dd61c16410a718de33def891b1c1 to your computer and use it in GitHub Desktop.
Wut?
function export_redis(RedisClient $redis, string $targetPath): array
{
ensureDir(dirname($targetPath));
$handle = fopen($targetPath, 'wb');
if ($handle === false) {
throw new RuntimeException("Unable to write Redis export: {$targetPath}");
}
$types = [
Redis::REDIS_STRING => 'string',
Redis::REDIS_SET => 'set',
Redis::REDIS_LIST => 'list',
Redis::REDIS_ZSET => 'zset',
Redis::REDIS_HASH => 'hash',
];
$keysWritten = 0;
$it = null;
do {
$keys = $redis->scan($it, null, REDIS_SCAN_COUNT);
if ($keys === false) {
$keys = [];
}
foreach ($keys as $key) {
$type = $redis->type($key);
if ($type === Redis::REDIS_NOT_FOUND) {
continue;
}
if (!isset($types[$type])) {
throw new RuntimeException("Unsupported Redis type for key {$key}");
}
$entry = [
'key_b64' => base64_encode((string) $key),
'type' => $types[$type],
'pttl' => (int) $redis->pttl($key),
];
switch ($types[$type]) {
case 'string':
$entry['value_b64'] = base64_encode((string) $redis->get($key));
break;
case 'hash':
$items = [];
foreach ($redis->hGetAll($key) as $field => $value) {
$items[] = [base64_encode((string) $field), base64_encode((string) $value)];
}
$entry['items'] = $items;
break;
case 'set':
$members = [];
foreach ($redis->sMembers($key) as $member) {
$members[] = base64_encode((string) $member);
}
$entry['members'] = $members;
break;
case 'zset':
$members = [];
foreach ($redis->zRange($key, 0, -1, true) as $member => $score) {
$members[] = [base64_encode((string) $member), (float) $score];
}
$entry['members'] = $members;
break;
case 'list':
$values = [];
foreach ($redis->lRange($key, 0, -1) as $value) {
$values[] = base64_encode((string) $value);
}
$entry['values'] = $values;
break;
}
$json = json_encode($entry, JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR);
fwrite($handle, $json . "\n");
$keysWritten++;
}
} while ($it !== 0);
fclose($handle);
return ['keys' => $keysWritten];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment