好了,什么是冷熱資料交換呢?
很土的解釋一下,冷資料就是之前使用的資料,有種過去式的感覺,而熱資料就是當前的資料,理解為現在進行時吧,如何交換呢?就是將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=https://www.cnblogs.com/heyue0117/p/"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=https://www.cnblogs.com/heyue0117/p/"用戶1" onclick="vote(1);" /></p>
<p><span id="uid2">0</span><input type="button" value=https://www.cnblogs.com/heyue0117/p/"用戶2" onclick="vote(2);" /></p>
<p><span id="uid3">0</span><input type="button" value=https://www.cnblogs.com/heyue0117/p/"用戶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高并發和大流量的解決方案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95121.html
標籤:PHP
上一篇:tp5.1批量洗掉商品
