当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-10 09:33:25 浏览: 评论:0 

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

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

  1. [root@localhost ~]# php 1.php 
  2. 1/407 
  3. 101/407 
  4. 201/407 
  5. 301/407 
  6. 401/407 

PHP实例代码如下:

  1. <?php 
  2. $from = '10.0.2.52:6379/7'
  3. $to   = '127.0.0.1:6379/7'
  4. $from_redis = redis_init($from); 
  5. $to_redis   = redis_init($to); 
  6. $keys  = $from_redis->keys('*'); 
  7. $count = 0; 
  8. $total = count($keys); 
  9. foreach($keys as $key){ 
  10.     if(++$count % 100 == 1){ 
  11.         echo "$count/$total\n"
  12.     } 
  13.     $type = $from_redis->type($key); 
  14.     switch($type){ 
  15.         case Redis::REDIS_STRING: 
  16.             $val = $from_redis->get($key); 
  17.             $to_redis->set($key$val); 
  18.             break
  19.         case Redis::REDIS_LIST: 
  20.             $list = $from_redis->lRange($key, 0, -1); 
  21.             foreach($list as $val){ 
  22.                 $to_redis->rPush($key$val); 
  23.             } 
  24.             break
  25.         case Redis::REDIS_HASH: 
  26.             $hash = $from_redis->hGetAll($key); 
  27.             $to_redis->hMSet($key$hash); 
  28.             break
  29.         case Redis::REDIS_ZSET: 
  30.             $zset = $from_redis->zRange($key, 0, -1, true); 
  31.             foreach($zset as $val=>$score){ 
  32.                 $to_redis->zAdd($key$score$val); 
  33.             } 
  34.             break
  35.     } 
  36. function redis_init($conf){ 
  37. //开源代码phpfensi.com 
  38.     $redis = new Redis(); 
  39.     preg_match('/^([^:]+)(:[0-9]+)?\\/(.+)?/'$conf$ms); 
  40.     $host = $ms[1]; 
  41.     $port = trim($ms[2], ':'); 
  42.     $db = $ms[3]; 
  43.     $redis->connect($host$port); 
  44.     $redis->select($db); 
  45.     return $redis
  46. ?>

Tags: redis数据库 php库号迁移

分享到: