做电商网站需要会些什么,柳州市网站建设,网站建设效益,泰国浪琴手表网站场景#xff1a;某网站需要对其项目做一个投票系统#xff0c;投票项目上线后一小时之内预计有100万用户进行投票#xff0c;希望用户投票完就能看到实时的投票情况这个场景可以使用redismysql冷热数据交换来解决。何为冷热数据交换#xff1f;冷数据#xff1a;之前使用的…场景某网站需要对其项目做一个投票系统投票项目上线后一小时之内预计有100万用户进行投票希望用户投票完就能看到实时的投票情况这个场景可以使用redismysql冷热数据交换来解决。何为冷热数据交换冷数据之前使用的数据热数据当前使用的数据。交换将Redis中的数据周期的存储到MySQL中业务流程用户进行投票后首先将投票数据保存到Redis中这些数据就是热数据然后定期(如5s)将热数据保存到MySQL中这些数据就变为冷数据然后将冷数据从Redis中删除周而复始知道一个小时投票结束。项目结构图index.html文件这是投票的首页有3个投票按钮模拟给3个用户投票点击按钮使用ajax调用vote.php文件 Document0 0 012345678910111213141516171819202122vote.php这个文件主要实现投票的逻辑。首先连接上Redis服务器然后保存投票人id然后将投票人id为key记录每个用户的票数然后返回给index.html文件最后使用global_voteid作为key记录总票数也可以作为MySQL的自增长的键。然后记录uid,ip,time等数据。注意格式有一定的要求假如voteid为3记录的是ip那么键为vote:3:ip:127.0.0.1?php $redis new Redis();$redis-connect(localhost,6379);//计算每个用户的总票数$uid intval($_GET[uid]);//$uid mt_rand(1,3);//随机指定投票人员方便进行压力测试echo $redis-incr($uid);$voteid $redis-incr(global_voteid);$redis-set(vote:.$voteid.:uid,$uid);$ip $_SERVER[REMOTE_ADDR];$redis-set(vote:.$voteid.:ip,$ip);$redis-set(vote:.$voteid.:time,time());12345678910111213重点内容这个文件主要实现冷热数据交换首先连接MySQL数据库和redis服务器然后每隔5秒去执行while循环在while循环里获取自增长的投票主键和最近一次插入mysql的投票主键(位置)。判断插入的位置是否存在如果不存在就从头插入如果全部插入完毕就进行等待如果没有插入完毕就进行插入操作。?php //连接数据库$pdo new PDO(mysql:hostlocalhost;dbnametest,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秒执行循环}123456789101112131415161718192021222324252627282930313233343536373839vote表运行步骤1、使用php命令行工具调用swap.php2、使用Apache的ab工具进行压力测试。