mysql 冷热表_Redis+MySQL冷热数据交换

场景:某网站需要对其项目做一个投票系统,投票项目上线后一小时之内预计有100万用户进行投票,希望用户投票完就能看到实时的投票情况

这个场景可以使用redis+mysql冷热数据交换来解决。

何为冷热数据交换?

冷数据:之前使用的数据,热数据:当前使用的数据。

交换:将Redis中的数据周期的存储到MySQL中

业务流程

用户进行投票后,首先将投票数据保存到Redis中,这些数据就是热数据,然后定期(如5s)将热数据保存到MySQL中,这些数据就变为冷数据,然后将冷数据从Redis中删除,周而复始,知道一个小时投票结束。

项目结构图

117060156_1_20171123031357534

index.html文件

这是投票的首页,有3个投票按钮,模拟给3个用户投票,点击按钮,使用ajax调用vote.php文件

Document

0

0

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

vote.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());1

2

3

4

5

6

7

8

9

10

11

12

13

重点内容

这个文件主要实现冷热数据交换,首先连接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秒执行循环}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

vote表

117060156_2_20171123031357877

运行步骤:

1、使用php命令行工具调用swap.php

117060156_3_20171123031357955

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

117060156_4_20171123031358580

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于包装java_[java初探09]__关于java的包装类

前言在Java语言的学习过程中,我们逐渐的理解了Java面向对象的思想,与类和对象的应用.但是在基本数据类型的使用上,我们无法将其定义为一个对象,通过使用对象的方法来使用它们,但是Java语言的思想又是面向对象的.那么在Java语言中,是否能够解决这个问题,使基本数据类型能够以对象…

能跑java的服务器_一台java服务器可以跑多少个线程?

一台java服务器能跑多少个线程&#xff1f;这个问题来自一次线上报警如下图&#xff0c;超过了我们的配置阈值。京东自研UMP监控分析打出jstack文件&#xff0c;通过IBM Thread and Monitor Dump Analyzer for Java工具查看如下&#xff1a;IBM Thread and Monitor Dump Analyz…

php取json子对象属性,php中输出json对象的值(实现方法)

实例如下所示&#xff1a;$json {"report":{"date":"2012-04-10","content":"abcdefght"}};$arr (array) json_decode($json,true);echo 当前日期是&#xff1a;. $arr[report][date];echo "";echo ;print_r($a…

php mysql 表关联,mysql的多表关联_MySQL

bitsCN.commysql的多表关联数据库中经常要用到多个表的关联。mysql的关联主要包括inner join&#xff0c;left join&#xff0c;right join三种&#xff0c;下面分别加以介绍&#xff0c;并举例说明。顾名思义&#xff0c;inner join集合了两个表的信息&#xff0c;只有都包含的…

ulink php,【转载】15款USB数字界面横向评测(对比顶级CD转盘)!多看点!

还有一则有趣的回帖&#xff0c;一位纽约的烧友认为作者没有尝试何庆华最新的数字界面非常可惜&#xff0c;他认为何先生自主开发的DI-V3电源套件非常之牛&#xff0c;甚至超过了AP1PP的水准(不少人认为这个组合有一点点过于分析&#xff0c;不如何先生的作品水润)。他认为以他…

php取掉字符串第一位支付,php怎样去掉字符串中的第一个字符

php去掉字符串中的第一个字符的方法&#xff1a;可以利用substr()函数来实现。substr()函数可以返回字符串的提取部分&#xff0c;如果失败则返回false&#xff0c;或者返回一个空字符串。substr() 函数返回字符串的提取部分&#xff0c;如果失败则返回 FALSE&#xff0c;或者返…

matlab求距离判别函数,求MATLAB的逐步判别程序 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

somomo91你不觉得信息量太少了么&#xff1f;摸不着头脑&#xff0c;zhouxiaobo是啊&#xff0c;信息量太少&#xff0c;LZ能详细描述一下你的问题吗或者直接给出你的数据和要求2012jxyl引用回帖:zhouxiaobo at 2013-06-06 09:44:49是啊&#xff0c;信息量太少&#xff0c;LZ能…

php验证码背景图是数字,ThinkPHP5.0.20验证码背景图片

tp5配置验证码相关问题一、验证码背景图片及tp中文验证码5.0.1及以上支持者在应用配置目录(application)下面 extra 子目录内配置captcha.php文件&#xff1b;配置参数如下&#xff1a;2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY,// 验证码字体大小(px)fontSize &g…

c mysql安装教程,Mysql安装教程_完成版(吐血式安装)

每次在不同操作系统中安装oracle和mysql这些常规数据库&#xff0c;步骤就那么点儿&#xff0c;但是遇见的错误却是千差万别。。记一次耗时两天的mysql数据库安装新得&#xff0c;有耐心&#xff0c;有毅力&#xff0c;憋生气。1.官网上下载免安装的版本(也就是下载下来直接解压…

oracle替代变量输出,【Oracle】替代变量

1.替代变量通常而言&#xff0c;替代变量的前缀是&或者&&区别&#xff1a;& 用来创建一个临时变量&#xff0c;每当遇到这个临时变量时&#xff0c;都会提示你输入一个值&&用来创建一个持久变量&#xff0c;当用&&命令引用这个变量时&#xff…

oracle 常用故障,Oracle常见问题解决方案汇总

1、Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务数据库服务器崩了&#xff0c;而且尝试重启服务和重启机器都解决不了问题打开cmd窗口C:\Users\hxt>sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on 星期三 12月 5 11:39:54 2018Co…

特洛伊木马脚本linux,手动查杀特洛伊木马

首先也是最重要的&#xff0c;重新启动电脑到安全模式下&#xff0c;让所有文件都可见。然后进入到C:看看根目录是否存在不熟悉的文件&#xff0c;如果有&#xff0c;且日期为发现中毒现象当天&#xff0c;则删除之。接着到c:\windows&#xff0c;首先按照修改时间顺序排列图标…

linux添加虚拟硬盘命令,虚拟机linux扩盘命令操作

虚拟机linux扩展硬盘分原有硬盘上增加及新增硬盘&#xff0c;二者实现差不多。扩盘&#xff1a;fdisk -l查看是哪个盘扩盘了&#xff0c;如sdb重启后&#xff0c;将sdb刷新pv&#xff1a; pvresize /dev/sdb&#xff0c;pvdisplay查看是否增加了&#xff0c;再将逻辑卷分区VG(L…

mac ssh远程登录linux,MAC使用SSH远程登录

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;Sun 20 December 2015tags: 备忘录MAC使用SSH远程登录打开sshMac Terminal是自带SSH的&#xff0c;可以用whereis来看看$ whereis ssh但是在现有进程中是找不到ssh…

四叶草引导windows和linux,Windows环境下使用Clover四叶草引导双硬盘安装OSX 10.11.5原版镜像...

作为一个穷逼大学生&#xff0c;想搞iOS开发 买不起Mac只能鼓捣鼓捣黑苹果啦。。。。。。。。之前我的电脑通过变色龙引导的方式装了个OSX10.10和win8.1双系统&#xff0c;因为自学的是Swift语言之前装的OSX10.10.4的Xcode(6.多版本的)只支持到Swift1.2&#xff0c;所以现在要装…

linux bash 字符串 连接,Linux Bash 中字符串操作

Linux Bash 中字符串操作所谓 "子字符串" 就是出现在其它字符串内的字符串. 比如 "3382" 就是 "this is a 3382 test" 的子字符串. 我们有多种方法可以从中把数字或指定部分字符串抽取出来.本文会向你展示在 bash shell 中如何获取或者说查找出子…

maven下载源码linux,Maven 下载 源码和javadoc 命令

摘要&#xff1a;我们在写代码时候&#xff0c;往往是想查看一下源码&#xff0c;看看源码的一些细节内容。一般情况下&#xff0c;在IDE(如eclipse)中近仅仅只需按住ctrl 点击对应的方法即可进入对应的源码部分。但是有些时候很多依赖项并不会默认下载对应的源码&#xff0c;因…

Unity将来时:IL2CPP是什么?

Unity3D 想必大家都不陌生&#xff0c;独立游戏制作者们很多人都在用它&#xff0c;甚至一些大公司也用在很商业的游戏制作上。Unity3D最大的一个特点是一次制作&#xff0c;多平台部署&#xff0c;而 这一核心功能是靠Mono实现的。可以说Mono是Unity3D核心的核心&#xff0c;是…

手游频繁崩溃”闪退”? 从程序上找原因

手游频繁崩溃”闪退”&#xff1f; 从程序上找原因 作为玩家&#xff0c;当游戏crash的时候是什么心情&#xff0c;如果这个游戏玩起来还不错的话&#xff0c;那我可能还会打开第二次&#xff0c;如果这个游戏一般的话我可能直接怒删了。当多次出现闪退crash的时候&#xff0c;…

汇编语言属于C语言吧,汇编语言和c语言的区别是什么

区别&#xff1a;汇编语言的效率高&#xff0c;对硬件的可操控性更强&#xff0c;体积小&#xff0c;不易维护&#xff0c;可移植性很差&#xff1b;c语言的效率比较低&#xff0c;硬件可操控性比较差&#xff0c;目标代码体积大&#xff0c;容易维护&#xff0c;可移植性很好。…