php与Redis实现一个100万用户的投票项目,如何实现实时查看投票情况?
好了,什么是冷热数据交换呢?
很土的解释一下,冷数据就是之前使用的数据,有种过去式的感觉,而热数据就是当前的数据,理解为现在进行时吧。如何交换呢?就是将Redis的数据周期存储到mysql中!
整体的业务流程
用户投票后,首先将投票数据保存到Redis。 这些数据是热数据,然后写个定时任务,定时(例如10s)将热数据保存到MySQL。 这些数据成为冷数据,然后从Redis删除冷数据。 一遍又一遍,直到一个小时的投票结束了。
数据表构建

结构文件我们这里分index.html , vote.php , swap.php 分别来处理
index.html
这是投票的页面,假如有3个投票按钮,我们模拟给3个用户投票,点击按钮,使用ajax调用vote.php文件
vote.php文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
</head>
<script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
<body>
<p><span id="uid1">0</span><input type="button" value="用户1" onclick="vote(1);" /></p>
<p><span id="uid2">0</span><input type="button" value="用户2" onclick="vote(2);" /></p>
<p><span id="uid3">0</span><input type="button" value="用户3" onclick="vote(3);" /></p>
</body>
<script>
function vote(i){
$.get('./vote.php?uid='+i,function(rs){
var span = '#uid'+i;
$(span).html(rs);
});
}
</script>
</html>
vote.php
这个文件是实现投票的逻辑。首先连接上Redis服务器,然后保存投票人id,然后将投票人id为key记录每个用户的票数,然后返回给index.html文件,最后使用global_voteid作为key记录总票数,也可以作为MySQL的自增长的键。然后记录uid,ip,time等数据。

swap.php 文件
主要目的是交换热数据和冷数据。 首先,连接MySQL数据库和Redis服务器,然后每10秒执行一次while循环。 在while循环中,获取插入到mysql中的自增长投票主键和最新投票主键(位置)。确定插入位置是否存在。 如果不存在,请从头开始插入。 如果所有插入均已完成,请等待。 如果未插入,请执行插入操作

运行步骤如下:
1、运行 swap.php 文件,redis监听投票

linux系统使用php命令行工具调用swap.php (推荐使用这种方法)

2.模拟请求投票



有需要学习交流的友人请加入交流群的咱们一起,群内都是1-7年的开发者,希望可以一起交流,探讨PHP,swoole这块的技术 或者有其他问题 也可以问,获取swoole或者php进阶相关资料私聊管理即可
推荐阅读:
phper使用MySQL 针对千万级的大表要怎么优化?
PHP高并发和大流量的解决方案
php与Redis实现一个100万用户的投票项目,如何实现实时查看投票情况?的更多相关文章
- php结合Redis实现100万用户投票项目,并实时查看到投票情况的案例
场景:某网站需要对其项目做一个投票系统,投票项目上线后一小时之内预计有100万用户进行投票,希望用户投票完就能看到实时的投票情况 这个场景可以使用redis+mysql冷热数据交换来解决. 何为冷热数 ...
- 如何通过Dataphin构建数据中台新增100万用户?
欢迎来到数据中台小讲堂!这一期我们来看看,作为阿里巴巴数据中台(OneData - OneModel.OneID.OneService)方法论的产品载体,Dataphin如何帮助传统零售企业实现数字化 ...
- zt:如何快速赚取人生第一个100万?
投递人 itwriter 发布于 2016-06-20 23:43 评论(16) 有1795人阅读 原文链接 [收藏] « » 不久前我开始使用「分答」,将回答问题的价格设置成 10 元.花最长 1 ...
- 用PHP爬取知乎的100万用户
http://blog.jobbole.com/88788/ 突然发现 大数据 Python的爬虫能力很强 爬取到的数据 直接可以用于维修QQ营销 精准营销
- 从1500万用户巅峰跌落的app,血泪回顾图片社交那些坑
饭桌君说 第八届小饭桌创业课堂来了一位特殊的分享嘉宾,他曾经参与了一款当时极具风头的图片社交app的创始团队,靠谱团队,用户量急速上升到1500万,公司获得A轮……一切看上去都那么美好. 可是,由于各 ...
- 涨姿势:创业做一个App需要花多少钱(8个人,6个月,就要100万,附笔记心得)
(原标题:涨姿势:创业做一个App要花多少钱?) 作为互联网从业者,被外行的朋友们问及最多的问题是,“做一个网站需要多少钱?”或者“做一个APP需要多少钱?”. 作为做过完整网站项目和APP的人,今天 ...
- (转)转一份在 51testing 上的讨论——如何测试一个门户网站是否可以支持10万用户同时在线?
转自:http://www.cnblogs.com/jackei/archive/2006/11/16/561846.html 这个帖子的内容比较典型,大家有兴趣可以也思考一下. 先是楼主提出问题: ...
- erlang创建100万个进程,每一个进程花费多少时间呢?
最近工作需要,需要先测试一下erlang启动进程的时间开销: 看了一片博客,感觉挺好的,学习erlang推荐http://www.blogjava.net/yongboy/ 于是参照他的文章里面的一个 ...
- Redis位图法记录在线用户的状态
Redis位图法记录在线用户的状态 位图 Redis官方文档对于位图的介绍如下: 位图不是一个真实的数据类型,而是定义在字符串类型上的面向位的操作的集合.由于字符串类型是二进制安全的二进制大对象,并且 ...
随机推荐
- android逆向总结
首先项目里的java文件,以及项目引用到的第三方jar或aar包里面的class,统统都编译成classes.dex放在apk包的根目录,项目的资源目录和AndroidManifest.xml被处理生 ...
- 更改input标签的placeholder的样式
主要是要区别不同浏览器的不同css类 在input框中有时想将输入的字和placeholder设为不同的颜色或其它效果,这时就可以用以下代码来对placeholder进行样式设置了. input::- ...
- 使用OpenMP加快OpenCV图像处理性能 | speed up opencv image processing with openmp
本文首发于个人博客https://kezunlin.me/post/7a6ba82e/,欢迎阅读! speed up opencv image processing with openmp Serie ...
- 如何在C++中使用boost库序列化自定义class ?| serialize and deserialize a class in cpp with boost
本文首发于个人博客https://kezunlin.me/post/6887a6ee/,欢迎阅读! serialize and deserialize a class in cpp Guide how ...
- 2019-11-7:练习上传getshell,通过菜刀连接
一.使用phtstudy搭建环境 1,将emlog源码解压到phpstudy的www目录,复制emlog源码中的src所有文件到需要搭建emlog的目录中,修改emlog配置文件,输入好本机mysql ...
- 新闻实时分析系统 Spark2.X集群运行模式
1.几种运行模式介绍 Spark几种运行模式: 1)Local 2)Standalone 3)Yarn 4)Mesos 下载IDEA并安装,可以百度一下免费文档. 2.spark Standalone ...
- Linux -- 信号发送实现
信号是Linux系统响应某些条件而产生的一个事件,接收该信号的进程会响应地采取一些行动 signal 定义 在进程控制块 (PCB Process Control Block) 的数据结构中,存在 ...
- yum运行报错:File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^SyntaxError: invalid syntax
这是由于Python升级导致 备份Python 历史版本 [root@sdw1 autoconf]# ls /usr/bin/python* [root@sdw1 autoconf]# mv /usr ...
- 国内开源C# WPF控件库Panuon.UI.Silver强力推荐
国内优秀的WPF开源控件库,Panuon.UI的优化版本.一个漂亮的.使用样式与附加属性的WPF UI控件库,值得向大家推荐使用与学习. 今天站长(Dotnet9,站长网址:https://dotne ...
- jqery 动态添加元素 绑定事件
jQuery动态添加元素: var url = "...";//服务地址 $.ajax({ type: 'post', url: url, data:{fireId:fireId} ...