PHP结合Redis+MySQL实现冷热数据交换应用案例详解(2)
重点内容
这个文件主要实现冷热数据交换,首先连接MySQL数据库和redis服务器,然后每隔5秒去执行while循环,在while循环里获取自增长的投票主键和最近一次插入mysql的投票主键(位置)。判断插入的位置是否存在,如果不存在就从头插入,如果全部插入完毕,就进行等待,如果没有插入完毕,就进行插入操作。
<?php
//连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=test','root','1234');
$pdo->query('set names utf8');
//连接redis
$redis = new Redis();
$redis->connect('localhost',6379);
//永真循环
while(true){
$vid = $redis->get('global_voteid');//自增长的主键
$last = $redis->get('last');//最近一次插入mysql的投票主键
//如果没有插入数据库,刚开始的肯定为true
if(!$last){
$last = 0;//设置为0
}
//如果所有的数据都被插入到MySQL中
if($vid == $last){
echo "wait\n";//输出等待
}else{
//进行插入到数据库操作
$sql = 'insert into vote(vid,uid,ip,time) values';
for($i = $vid;$i>$last;$i--){
$k1 = 'vote:'.$i.':uid';
$k2 = 'vote:'.$i.':ip';
$k3 = 'vote:'.$i.':time';
$row = $redis->mget([$k1,$k2,$k3]);
$sql.="($i,$row[0],'$row[1]',$row[2]),";
$redis->delete($k1,$k2,$k3);
}
$sql = substr($sql,0,-1);
$pdo->exec($sql);
$redis->set('last',$vid);//设置插入的主键位置
echo 'OK';
}
sleep(5);//每隔5秒执行循环
}
vote表

运行步骤:
1、使用php命令行工具调用swap.php

2、使用Apache的ab工具进行压力测试。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+redis数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
