好了,什麼是冷熱數據交換呢?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進階相關資料私聊管理便可
推薦閱讀: