好了,什么是冷熱數據交換呢?
很土的解釋一下,冷數據就是之前使用的數據,有種過去式的感覺,而熱數據就是當前的數據,理解為現在進行時吧。如何交換呢?就是將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進階相關資料私聊管理即可
推薦閱讀: