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進階相關資料私聊管理即可

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

 

 

推薦閱讀:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM