php與Redis實現一個100萬用戶的投票項目,如何實現實時查看投票狀況?

好了,什麼是冷熱數據交換呢?php

很土的解釋一下,冷數據就是以前使用的數據,有種過去式的感受,而熱數據就是當前的數據,理解爲如今進行時吧。如何交換呢?就是將Redis的數據週期存儲到mysql中!html

 總體的業務流程node

用戶投票後,首先將投票數據保存到Redis。 這些數據是熱數據,而後寫個定時任務,定時(例如10s)將熱數據保存到MySQL。 這些數據成爲冷數據,而後從Redis刪除冷數據。 一遍又一遍,直到一個小時的投票結束了。mysql

 數據表構建jquery

 

 結構文件咱們這裏分index.html ,  vote.php , swap.php  分別來處理linux

index.htmlajax

這是投票的頁面,假若有3個投票按鈕,咱們模擬給3個用戶投票,點擊按鈕,使用ajax調用vote.php文件redis

vote.php文件sql

<!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中的自增加投票主鍵和最新投票主鍵(位置)。肯定插入位置是否存在。 若是不存在,請從頭開始插入。 若是全部插入均已完成,請等待。 若是未插入,請執行插入操做

 

 運行步驟以下:

一、運行 swap.php 文件,redis監聽投票

linux系統使用php命令行工具調用swap.php (推薦使用這種方法)

 

 

 

 2.模擬請求投票

 

 

 

 

 

有須要學習交流的友人請加入交流羣的我們一塊兒,羣內都是1-7年的開發者,但願能夠一塊兒交流,探討PHP,swoole這塊的技術 或者有其餘問題 也能夠問,獲取swoole或者php進階相關資料私聊管理便可

點此加入該羣​jq.qq.com

 

 

推薦閱讀:

phper使用MySQL 針對千萬級的大表要怎麼優化?

PHP高併發和大流量的解決方案

相關文章
相關標籤/搜索