91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用redis制作投票系統的計數器

發布時間:2020-05-19 14:47:42 來源:億速云 閱讀:281 作者:Leah 欄目:關系型數據庫

這篇文章主要為大家詳細介紹了如何使用redis制作投票系統的計數器,文中示例代碼介紹的非常詳細,零基礎也能參考此文章,感興趣的小伙伴們可以參考一下。

校驗

首先,要對每個用戶的投票數進行校驗。用戶每天都有3次投票機會,所以,我們可建立個鍵,將他的有效期設為明天凌晨。用戶每投一票就加1等到了3票后,就提示今日次數已用完。

// 投票次數校驗
function checkVote($uid)
{
    $key = "uid:$uid:cnt";
    $tomrTime = mktime(0,0,0, date('m'), date('d')+1, date('Y'));
    
    if (!$redis->exsits($key)) {
        $redis->set($key, 0, ['ex' => $tomrTime - time()]);
        return true;
    } else if ( ($cnt = $redis->get($key)) < 3 ) {
        return true;
    } else {
        return false;
    }
}

統計投票

次數校驗通過后,就需要統計用戶的得票數了。

// 得票數計數
// uid表示投票人id
// touid表示得票人id
function vote ($uid, $toUid)
{
    $key = "uid:$toUid:vote";
    
    // 投票數校驗
    if (checkVote($uid)) {
        // 統計投票數及參選人得票數
        $redis->incr($key);
        $redis->incr("uid:$uid:cnt");
        
        return true;
    } else {
        return false;
    }
}

我自己的阿里云主機配置只有1核cpu1G內存的配置,每秒incr性能能達到10萬多次,redis性能真恐怖。

# redis-benchmark -t incr -q
INCR: 105708.25 requests per second

Mysql異步更新用戶得票數

最后,我們只需要做一個定時任務了,讓mysql每隔一定時間就去同步用戶的得票數。

方法是做一個死循環,每次循環都獲取50個用戶得票數,直到遍歷完所有用戶后,就退出循環,結束腳本。

$start = 0;
while (true) {
    // 每次循環取50個用戶id
    $users = $DB->query("SELECT uid,votes FROM users LIMIT $start, 50");
    if (!$users) {
        exit();
    }
    $keys = [];
    foreach ($users as $userinfo) {
        $keys[] = "uid:{$userinfo['uid']}:vote";
    }
    $votes = $redis->mget($keys);
    foreach ($votes as $index => $vote) {
        if ($vote != $users[$index]['votes']) {
            $DB->query("UPDATE users SET votes = '$vote' WHERE uid='{$users[$index]['uid']}");
        }
    }
    $start += 50;
}

Redis的mget命令的是一次獲取多個key的值。獲取了redis里存放的redis得票數后,要先和Mysql里的得票數做比對。不一樣的時候才去更新Mysql的數據。

看完上述內容,你們掌握使用redis制作投票系統的計數器的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呼图壁县| 中阳县| 孝义市| 信阳市| 凯里市| 自贡市| 长葛市| 准格尔旗| 泾阳县| 东源县| 玉山县| 金华市| 新疆| 健康| 大方县| 五台县| 玉山县| 小金县| 垣曲县| 樟树市| 隆安县| 建水县| 丰原市| 调兵山市| 全南县| 青州市| 栖霞市| 杨浦区| 濮阳市| 通州市| 石家庄市| 新平| 晋宁县| 自治县| 乌拉特后旗| 房产| 灌阳县| 吉木乃县| 红原县| 诸暨市| 吴忠市|