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

标签 php redis predis phpredis

如何在 PHP 上转储和恢复 redis 数据库,我正在使用 predis在我的客户端上。

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

更新:

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

$redis->bgSave();

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

最佳答案

作为Malinga,恢复发生在redis服务器重启时。所以你需要设置appendonly no。这样它将使用 .rdb 文件。

因此,我创建了一个示例程序来备份和恢复 redis 数据库,这里是 code你可以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 - 在 PHP 上转储和恢复 Redis (predis),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38167546/

相关文章:

php - MySQL查询多选随机结果

ruby - Redis 管道作为原子

node.js - 有没有办法在redis服务的GEOADD方法中添加Date属性

php - 不同浏览器的 Laravel Redis 行为

php - 由于目标机器主动拒绝,无法建立连接。 [tcp ://127. 0.0.1:6379] - codeigniter

php - 使用 cURL 登录到特定的 WordPress 页面

php - 在php中添加两个或多个时间字符串

php - mysql中过滤字段后缀

c# - Redis Docker - 无法从 C# 客户端连接

Laravel 5.5 Redis 问题 - 调用未定义的方法 Illuminate\Support\Facades\Redis::connect()