首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PHP上转储和恢复Redis (predis)

在PHP上转储和恢复Redis (predis)
EN

Stack Overflow用户
提问于 2016-07-03 07:05:54
回答 2查看 2K关注 0票数 1

如何在PHP上转储和恢复redis数据库,我在我的客户机上使用了普雷迪斯

我可以用.rdb格式转储redis数据库吗?

更新:

我使用以下命令转储/备份数据库,

代码语言:javascript
运行
复制
$redis->bgSave();

如何将其还原回我的数据库?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-22 07:32:36

作为Malinga,恢复发生在redis服务器重新启动时。所以你只需要设置附录不。所以它将使用.rdb文件。

因此,我创建了一个备份和恢复redis数据库的示例程序,下面是可以使用的代码 检查

出口:

代码语言:javascript
运行
复制
$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);

导入:

代码语言:javascript
运行
复制
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下载

票数 3
EN

Stack Overflow用户

发布于 2016-07-03 08:48:16

在redis中,可以使用SAVE或BGSAVE创建快照。但是,建议使用BGSAVE,因为保存将阻止所有其他客户端。

要在predis做到这一点,应该可以通过

代码语言:javascript
运行
复制
$client->executeRaw(['BGSAVE']);

抱歉,我和predis试过了。因此,首先检查客户端是否允许类似的

代码语言:javascript
运行
复制
$client->bgsave(); 

如果不尝试以上的话

还原发生在redis服务器重新启动时。所以你只需要设置附录不。所以它将使用.rdb文件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38167546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档