时间:2021-07-01 10:21:17 帮助过:3人阅读
发帖、发微博、点赞、评论等这些操作很频繁的动作如果并发量小,直接入库是最简单的
但是并发量一大,数据库肯定扛不住,这时可采取延迟发布:先将发布动作保存在队列里,后台进程循环获取再入库
模拟发布微博先进入redis队列
weibo_redis.php
- <?php
- //此处需要安装phpredis扩展
- $redis = new Redis();
- $redis->connect('127.0.0.1', 6379);
- $redis->auth("php001");
- //连接redis
- $web_info= array(
- 'uid' => $_REQUEST[uid], //发布者id
- 'username' => $_REQUEST[username],//发布者用户名
- 'content' =>$_REQUEST[content],//微博内容
- );
- //将数组转成json来存储
- $list = json_encode($web_info);
- //lpush向KEY对应的头部添加一个字符串元素
- $redis->lpush('weibo_lists',$list);
- $redis->close();
- var_dump($list);
- ?>
模拟后台进程从redis队列获取微博
Pdodb.class.php
- <?php
- class Pdodb{
- public function post($uid='',$username='',$content=''){
- try{
- $dsn = "mysql:localhost;dbname=localhost;dbname=big";
- $db = new PDO($dsn,'big','123456');
- $db->exec("SET NAMES UTF8");
- $sql ="insert into ih_weibo(uid,username,content)values('$uid','$username','$content')";
- //echo $sql;
- $db->exec($sql);
- }catch(PDOException $e){
- echo $e->getMessage();
- }
- }
- }
weibo_mysql.php
- <?php
- require_once 'Pdodb.class.php';
- set_time_limit(0); // 取消脚本运行时间的超时上限
- $pdo = new Pdodb();
- $redis = new Redis();
- $redis->connect('127.0.0.1', 6379);
- while (true) {
- //返回的列表的大小。如果列表不存在或为空,该命令返回0。如果该键不是列表,该命令返回false
- if($redis -> lsize('weibo_lists')){
- //从LIST头部删除并返回删除数据
- $info = $redis->rpop('weibo_lists');
- $info = json_decode($info);
- $pdo->post($info->uid,$info->username,$info->content);
- }
- $redis->close();
- sleep(10);//延时10秒
- }
后台执行weibo_mysql.php
nohup php /var/www/html/big/weibo_mysql.php &
以上就是本文的全部内容,希望对大家的学习有所帮助。
相关推荐:
phpredis 装配
PHP Redis,phpredis
php 安装redis扩展,phpredis扩展
以上就是php结合redis实现高并发下发帖、发微博的方法的详细内容,更多请关注Gxl网其它相关文章!