$reids = new Redis; $redis->connect('localhost',6379); $redis->auth(''); //将数组转换成字符串再存到redis中 $str = serialize($_POST); //$_POST是表单提交的数据,这里省略客户端代码 $key = 'users'; //列表存储 $res = $redis->lpush($key,$str); if($res){ echo '保存数据成功'; //这里提示用户数据成功保存 (存在redis中,之后再插入mysql) }else{ echo '失败'; }
新建一个文件,用来处理redis数据插入mysql。因为redis中的数据是不断的更新的,所以把redis中的数据存到mysql中也是需要持续不断的进行,那么就需要while死循环。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
$reids = new Redis; $redis->connect('localhost',6379); $redis->auth(''); $key = 'users'; $pdo = new PDO('mysql:host=localhost;dbname=user;charset=utf8','root',''); //因为挪动数据是需要不停地做 while (true) { //判断redis中是否有数据插入mysql if($redis->llen($key)>0){ //读取数据 $data = $redis->rpop($key); //将之前串行化数据转换成数组 $arr = unserialize($data); //将数据插入mysql $stmt = $pdo->prepare('insert into users (username,password,email) values (:username,:password,:email)'); //执行 $stmt->execute($arr); $res = $stmt->rowCount(); //获取受影响行数 }else{ //当没有数据需要插入mysql的时候,就暂停休息 sleep(10); //休息10秒 } }
需要知道一点:不管客户端浏览器是否关闭,服务器端的死循环都是一直执行的(前提是PHP代码不会超时)。(PHP有个代码超时时间,可以通过set_time_limit()设置超时时间)。如果想要停止脚本执行,需要重启Apache服务器。