Heim >php教程 >php手册 >php实现redis数据库指定库号迁移

php实现redis数据库指定库号迁移

WBOY
WBOYOriginal
2016-05-25 16:38:242295Durchsuche

下面来一个朋友写的php实现redis数据库指定库号迁移,希望例子能给各位带来帮助.

redis普通的数据库迁移,只能整个redis save,或者利用主从,当然也可以安装一个redis-dump,不过比较麻烦,这里提供一种php的脚本,实现指定库号的迁移,其实也就是遍历根据存储类型,读出来,插入新库,效果是这样:

[root@localhost ~]# php 1.php 

1/407 

101/407 

201/407 

301/407 

401/407 

PHP实例代码如下:

<?php 
$from = &#39;10.0.2.52:6379/7&#39;; 
$to   = &#39;127.0.0.1:6379/7&#39;; 
$from_redis = redis_init($from); 
$to_redis   = redis_init($to); 
$keys  = $from_redis->keys(&#39;*&#39;); 
$count = 0; 
$total = count($keys); 
foreach($keys as $key){ 
if(++$count % 100 == 1){ 
    echo "$count/$total\n"; 
} 
$type = $from_redis->type($key); 
switch($type){ 
    case Redis::REDIS_STRING: 
        $val = $from_redis->get($key); 
        $to_redis->set($key, $val); 
        break; 
    case Redis::REDIS_LIST: 
        $list = $from_redis->lRange($key, 0, -1); 
        foreach($list as $val){ 
            $to_redis->rPush($key, $val); 
        } 
        break; 
    case Redis::REDIS_HASH: 
        $hash = $from_redis->hGetAll($key); 
        $to_redis->hMSet($key, $hash); 
        break; 
    case Redis::REDIS_ZSET: 
        $zset = $from_redis->zRange($key, 0, -1, true); 
        foreach($zset as $val=>$score){ 
            $to_redis->zAdd($key, $score, $val); 
        } 
        break; 
} 
} 
function redis_init($conf){ 
 
$redis = new Redis(); 
preg_match(&#39;/^([^:]+)(:[0-9]+)?\\/(.+)?/&#39;, $conf, $ms); 
    $host = $ms[1]; 
    $port = trim($ms[2], &#39;:&#39;); 
    $db = $ms[3]; 
    $redis->connect($host, $port); 
    $redis->select($db); 
    return $redis; 
}


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn