在 PHP 上转储和恢复 Redis (predis)
Dump and Restore Redis on PHP (predis)
如何在 PHP 上转储和恢复 redis 数据库,我在我的客户端上使用 predis。
我可以将 redis 数据库转储为 .rdb 格式吗?
更新:
我dump/backup数据库使用下面的命令,
$redis->bgSave();
如何将其还原回我的数据库?
在redis 中,您可以使用SAVE 或BGSAVE 创建快照。但是建议使用 BGSAVE,因为 SAVE 会阻止所有其他客户端。
要在 predis 中做到这一点,应该可以通过
$client->executeRaw(['BGSAVE']);
抱歉,我还没有用 predis 尝试过。所以首先检查客户端是否允许
$client->bgsave();
如果不行,试试上面的方法
正在恢复发生在redis服务器重启时。所以你需要设置appendonly no。这样它将使用 .rdb 文件
作为Malinga,恢复发生在redis服务器重启时。所以你需要设置appendonly no。这样它将使用.rdb 文件。
所以,我创建了一个示例程序来备份和恢复redis数据库,这里是code you can check
导出:
$i = 0;
$json = array();
foreach($redis->keys('*') as $key) {
$data = array();
$data['key'] = $key;
$data['ttl'] = $redis->ttl($key);
$data['value'] = bin2hex($redis->dump($key));
$json[$i] = $data;
$i++;
}
header('Content-disposition: attachment; filename=database.json');
header('Content-type: application/json');
echo json_encode($json);
导入:
if (isset($_POST['submit']) && $_POST['submit'] == 'Import') {
$types = array(
'application/json',
'application/octet-stream'
);
if (in_array($_FILES['upload']['type'], $types)) {
var_dump($_FILES);
if (move_uploaded_file($_FILES['upload']['tmp_name'], 'uploads/' . $_FILES['upload']['name']))
{
$file = file_get_contents('uploads/' . $_FILES['upload']['name'], "r");
$database = json_decode($file, true);
foreach($database as $data)
{
if ($data['ttl'] >= 0)
{
$data['ttl'] = $data['ttl'];
}
else
{
$data['ttl'] = 0;
}
if ($data['key'] && $data['value'] && !$redis->exists($data['key']))
{
$redis->restore($data['key'], $data['ttl'], hex2bin($data['value']));
}
}
}
}
}
完整代码可以通过GitHub
下载
如何在 PHP 上转储和恢复 redis 数据库,我在我的客户端上使用 predis。
我可以将 redis 数据库转储为 .rdb 格式吗?
更新:
我dump/backup数据库使用下面的命令,
$redis->bgSave();
如何将其还原回我的数据库?
在redis 中,您可以使用SAVE 或BGSAVE 创建快照。但是建议使用 BGSAVE,因为 SAVE 会阻止所有其他客户端。
要在 predis 中做到这一点,应该可以通过
$client->executeRaw(['BGSAVE']);
抱歉,我还没有用 predis 尝试过。所以首先检查客户端是否允许
$client->bgsave();
如果不行,试试上面的方法
正在恢复发生在redis服务器重启时。所以你需要设置appendonly no。这样它将使用 .rdb 文件
作为Malinga,恢复发生在redis服务器重启时。所以你需要设置appendonly no。这样它将使用.rdb 文件。
所以,我创建了一个示例程序来备份和恢复redis数据库,这里是code you can check
导出:
$i = 0;
$json = array();
foreach($redis->keys('*') as $key) {
$data = array();
$data['key'] = $key;
$data['ttl'] = $redis->ttl($key);
$data['value'] = bin2hex($redis->dump($key));
$json[$i] = $data;
$i++;
}
header('Content-disposition: attachment; filename=database.json');
header('Content-type: application/json');
echo json_encode($json);
导入:
if (isset($_POST['submit']) && $_POST['submit'] == 'Import') {
$types = array(
'application/json',
'application/octet-stream'
);
if (in_array($_FILES['upload']['type'], $types)) {
var_dump($_FILES);
if (move_uploaded_file($_FILES['upload']['tmp_name'], 'uploads/' . $_FILES['upload']['name']))
{
$file = file_get_contents('uploads/' . $_FILES['upload']['name'], "r");
$database = json_decode($file, true);
foreach($database as $data)
{
if ($data['ttl'] >= 0)
{
$data['ttl'] = $data['ttl'];
}
else
{
$data['ttl'] = 0;
}
if ($data['key'] && $data['value'] && !$redis->exists($data['key']))
{
$redis->restore($data['key'], $data['ttl'], hex2bin($data['value']));
}
}
}
}
}
完整代码可以通过GitHub
下载