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

 更新时间:2016年11月25日 16:35  点击:2092
下面来一个朋友写的php实现redis数据库指定库号迁移,希望例子能给各位带来帮助哦。

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

 代码如下 复制代码

[root@localhost ~]# php 1.php
1/407
101/407
201/407
301/407
401/407

上代码:

 

 代码如下 复制代码

<?php
$from = '10.0.2.52:6379/7';
$to   = '127.0.0.1:6379/7';
$from_redis = redis_init($from);
$to_redis   = redis_init($to);
$keys  = $from_redis->keys('*');
$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('/^([^:]+)(:[0-9]+)?\\/(.+)?/', $conf, $ms);
    $host = $ms[1];
    $port = trim($ms[2], ':');
    $db = $ms[3];
    $redis->connect($host, $port);
    $redis->select($db);
    return $redis;
}
 

今天碰到一个连接mysql的怪问题,我在php 环境本地用ip连接mysql响应快,用localhost连接慢,后来百度了一下整理了一些解决办法,大家一起来看看。

很长时间了,本地php环境,用localhost连接mysql时,只要访问有查询数据库的页面,就会发生响应慢的现象,找了些资料也没解决。

今天突然用ip连接了一下,发下速度竟然快了好多,朋友过来帮看了下。

检查了一下hosts文件,发现127.0.0.1没有解析到localhost,恍然大悟啊。

没有解析过去,响应速度当然慢了,它每次都要自己查找一遍。

第二种就是修改php.ini配置文件里的mysql.default_host,并且把mysql_connect()中的第一个参数写为空字符串;这个方法还没有测试成功过,可能是我把某些地方忽略了吧~~


远程连接MYSQL慢


出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在my.ini(WINDOWS系统下)或MY.CNF(UNIX或LINUX系统下)文件的[mysqld]下加入skip-name-resolve这一句,保存。

开始--》运行--》cmd--》net stop mysql --》net start mysql--》哈哈,成功

my.ini所在路径如:D:\Program Files\MySQL\MySQL Server 5.0\my.ini

原来是MySQL的问题呀,这样操作后就不能在MySQL的授权表中使用主机名了而只能用ip。

我们要实现通过php调用sql把数据写入到mysql数据库是非常的简单的我们只要三就步可以实现了,下面来给大家整理php向mysql写入数据的例子。

PHP向MySQL数据库中写入数据有三个步骤:

1,PHP和MySQL建立连接关系

2,打开MySQL数据库

3,接受页面数据,PHP录入到指定的表中

1、2两步可直接使用一个数据库链接文件即可:conn.php

 代码如下 复制代码

<?php
mysql_connect("localhost","root","");//连接MySQL
mysql_select_db("hello");//选择数据库
?>


当然,前提是已经安装WEB服务器、PHP和MySQL,并且建立MySQL表“cnbruce”

mysql_connect()中三个参数分别为MySQL地址、MySQL用户名和MySQL密码

然后就是通过WEB页面传递数据,让PHP通过SQL语句将数据写入MySQL数据库指定的表中,比如新建文件 post.php

 

 代码如下 复制代码

<?php
require_once("conn.php");//引用数据库链接文件

$uname = $_GET['n'];//GET方法为URL参数传递
$psw = $_GET['p'];
$psw=md5($psw);//直接使用MD5加密

$sql = "insert into members(username,password) values ('$uname','$psw')";
mysql_query($sql);//借SQL语句插入数据

mysql_close();//关闭MySQL连接
echo "成功录入数据";
?>

测试页面: http://localhost/post.php?n=cnbruce&p=i0514

即可向MySQL数据库hello的members表中插入新的数据“cnbruce”到username字段、“i0514”到password字段

补充:读取表

读取表中的内容,这里我们用while,可以根据具体情况,用for 或其他的.

 代码如下 复制代码

while($row = mysql_fetch_array($result))
{
echo "<div style="height:24px; line-height:24px; font-weight:bold;">"; //排版代码
echo $row['Topic'] . "<br/>";
echo "</div>"; //排版代码
}

上面是接受的post例子

 代码如下 复制代码

<?php
 $con=mysql_connect("localhost","root","gl");
 mysql_select_db("happysea");

 $name=$_POST['name'];
 $password=$_POST['password'];
 $sex=$_POST['sex'];
 $e_mail=$_POST['e_mail'];
 $question=$_POST['question'];
 $answer=$_POST['answer'];

 $sql="insert into userinfo(name,password,sex,e_mail,question,answer)
  values('$name','$password','$sex','$e_mail','$question','$answer')";
 
 if(!$sql)
 {
  echo('注册失败!');
 }
 else
 {
  echo('注册成功!');
 }

?>

这是数据库。

mysql> describe userinfo;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id             | int(11)         | NO    | PRI | NULL    | auto_increment |
| name       | text              | YES  |        | NULL    |                |
| password | varchar(20) | YES  |        | NULL    |                |
| sex           | char(4)         | YES  |        | NULL   |                |
| e_mail      | varchar(30)  | YES  |        | NULL    |                |
| question   | text               | YES  |        | NULL    |                |
| answer     | text               | YES  |        | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

php导入excel文件入mysql数据库我们是需一借助一个phpexcel类文件了,有了这个类文件我们就可以快速简单的导入excel到mysql数据库中,下面来给大家整理一个例子,希望能对大家有帮助。

导入前我们需要先准备一个数据库,sql语句代码

 代码如下 复制代码


/*
Navicat MySQL Data Transfer

Source Server         : www.111cn.net localhost
Source Server Version : 50133
Source Host           : localhost:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50133
File Encoding         : 65001

Date: 2011-10-11 14:11:38
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `execl`
-- ----------------------------
DROP TABLE IF EXISTS `execl`;
CREATE TABLE `execl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of execl
-- ----------------------------
INSERT INTO `execl` VALUES ('14', 'jim');
INSERT INTO `execl` VALUES ('15', 'taurus');


php处理程序,在这里我们需要使用一个phpexcel类文件了,这个可以百度搜索下载。

 代码如下 复制代码

<?php
if($_FILES['execl']['name']){
 $db = mysql_connect('localhost','root','');
  mysql_select_db('test');
  mysql_query('set names gbk');
  require_once 'reader.php';
  $data = new Spreadsheet_Excel_Reader();
  $data->setOutputEncoding('CP936');
  $data->read($_FILES['execl']['name']);
 error_reporting(E_ALL ^ E_NOTICE);
 $sql   = "";
 for($i=1;$i<=$data->sheets[0]['numRows'];$i++)
 {
  if($data->sheets[0]['cells'][$i][1]!=""){
   $sql = "INSERT INTO `execl`(`name`)values('".$data->sheets[0]['cells'][$i][2]."');";
   if(mysql_query($sql)){
    
    echo '成功';
   }else{
    die('失败');
   }
  } 
 }
}
?>
<head>
</head>
<body>
  <form action="" method="post" enctype="multipart/form-data">
      <input type="file" name="execl" />
      <input type="submit" value="导入数据" />
  </form>
</body>

SQLite数据库安装好之后我们只要在php.ini中把 ;extension=php_pdo_sqlite.dll 前面的;取消掉就可以了,下面我来给大家简单的介绍一下吧。

SQLite数据库的配置
  1.打开php.ini
  2.启用extension=php_sqlite.dll扩展(如果需要支持PDO连接的话还需要启用extension=php_pdo_sqlite.dll扩展)
  3.重启Apache服务器

sqlite中比较常用的函数

  打开或者创建数据库操作:sqlite_open(string 目标数据库的名称[,int 操作该数据库的读写模式,string 返回数据库的错误信息]);//使用该方法的时候,如果第一个参数中指定的数据库已经存在的话就进行连接,如果不存在的话就自动创建;第二个参数的读写模式默认是0666
  执行SQL语句操作:sqlite_query(resource 数据库连接的句柄,string SQL语句);//类似于mysql中的mysql_query()方法
  统计表中的总记录数:sqlite_num_rows(resource 执行SQL语句后返回的数据集资源);//类似于mysql中的mysql_num_rows()方法
  最后一次操作的数据ID:sqlite_last_insert_rowid(resource 数据库连接的句柄);//类似于mysql中的mysql_insert_id()方法
  返回查询结果的数据集指针:sqlite_fetch_array(resource 数据库连接的句柄,resource 执行SQL语句后返回的数据集资源)类似于mysql中的mysql_fetch_array()方法
SQLite数据库操作实例
1.创建一个名称为newdb的数据库
  $db=sqlite_open("newdb.db") or die('创建或连接数据库失败!');
2.在newdb数据库中新建一个名称为mytable的表
  sqlite_query($db,"CREATE TABLE mytable ( uid INT ( 11 ) NOT NULL PRIMARY KEY , uname VARCHAR ( 30 ) NOT NULL ) ") or die('新建表失败!');
3.插入数据到mytable中
  sqlite_query($db,"insert into mytable values (1,'Tom')") or die('添加数据失败!');
4.取出表中所有的数据并显示出来
  $val=sqlite_query($db,"select * from mytable");
  while($ru=sqlite_fetch_array($val)){
    print_r($ru);
  }
5.关闭newdb数据库
  sqlite_close($db);

SQLite有一款类似于phpMyadmin的数据库管理工具

SQLiteManager管理SQLite数据库
  SQLite是一种轻量级的文件型数据库,它遵守ACID的关联式数据库管理系统,它占用资源低、扩展性强、兼容性强。
  PHP与SQLite的关系就好像是ASP与Access的关系,Access是文件型数据库,SQLite也是文件型数据库,文件型数据库的特点就是,不用像Mysql、MSSQL、Oracle等数据库那样需要另外安装,使用Access或是SQLite之类的文件型数据库前只需要下载相应的扩展驱动包,然后放到相应的扩展目录,稍作配置就可以使用了。现在的PHP5及以上的版本都内置了SQLite数据库扩展,只需要在php.ini中开启扩展便可以直接使用了,详情参考:PHP5中SQLite数据库的配置。
  据说SQLite的源码包只有不到3万行的代码,加起来还不到300KB,它的“轻量”和“效率”可想而知。
  SQLiteManager与phpMyAdmin的不同之处:
  SQLiteManager不会像phpMyAdmin那样能自动识别你的数据库,使用SQLiteManager前,需要手动的对数据库的路径和名称进行配置,配置好之后才可以在SQLiteManager下管理数据库。
SQLiteManager管理SQLite数据库操作流程
  1.打开WAMP环境中自带的SQLiteManager
  2.在主页中的名称输入框中输入要管理的数据库名称(已经创建好的数据库名称)
  3.点击浏览,找到数据库文件,打开
  4.在路径中输入数据库文件的绝对路径,我的是在D:/www/mydb.db(注意斜杠的方向!)
  5.点击保存
  这样,SQLiteManager就可以与刚刚新建的数据库建立连接了,此时就可以在SQLiteManager中像phpMyAdmin一样管理你的SQLite数据库了。

[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • php语言实现redis的客户端

    php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
  • jQuery+jRange实现滑动选取数值范围特效

    有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • jQuery+slidereveal实现的面板滑动侧边展出效果

    我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15
  • PHP+jQuery翻板抽奖功能实现

    翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
  • c#异步读取数据库与异步更新ui的代码实现

    这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25
  • Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21