国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

實(shí)時(shí)投票系統(tǒng):數(shù)據(jù)類型上的差異:memcache和redis

muzhuyu / 2506人閱讀

摘要:最近要寫一個(gè)類投票的系統(tǒng)由于訪問量可能會(huì)比較大,最好不直接使用數(shù)據(jù)庫,完全使用緩存的話,存在緩存失效等的風(fēng)險(xiǎn),因此在上面寫個(gè)緩存中間過渡按照我的習(xí)慣,肯定是使用,但是公司目前這個(gè)項(xiàng)目線上還沒有服務(wù),只好湊合一下使用。

最近要寫一個(gè)類投票的系統(tǒng):由于訪問量可能會(huì)比較大,最好不直接使用mysql數(shù)據(jù)庫,完全使用緩存的話,存在緩存失效等的風(fēng)險(xiǎn),因此在mysql上面寫個(gè)緩存中間過渡:
1.memcache

按照我的習(xí)慣,肯定是使用redis,但是公司目前這個(gè)項(xiàng)目線上還沒有redis服務(wù),只好湊合一下使用memcache。

第一次的時(shí)候使用memcache

這么寫:
key為"13453" value為13920,

key為"13454" value為12989,
...

但是這么一來的話就不好排序了,每次想排序,都要從緩存中取出很多個(gè)值。

第二次這么寫:

memcache中存儲(chǔ)了一個(gè)數(shù)組: "pid" =>count

array(

"13453" =>13920,

"13454"=>12989,

...

)
每次有人投票需要先取出該數(shù)組,然后再對(duì)應(yīng)的pid上面加1,排序,再存入memcache中,代碼如下:

[php] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
/**
* @brief 從memcache中取出數(shù)據(jù),并相應(yīng)增加一,然后排序
*/
private function _addCount($uid) {
if(empty($uid)) {
return false;
}
$mc_key = "MEM_KEY_SORT";
$list = self::memcache()->get($mc_key);
$list[$uid]++;
if(empty($list)) {
$list = $this->_getCount();//數(shù)據(jù)不存在則查詢數(shù)據(jù)庫(group by)
}
asort($list);
$ret = self::memcache()->set($mc_key, $list);
}
[php] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
/**
* @brief 從數(shù)據(jù)庫獲取投票次數(shù)
* @return array("uid" => "次數(shù)")
*/
private function _getCount() {
$sql = "select pid,count(pid) as count from tmp_ssjj_zqwz group by pid";
$query = self::db()->query($sql);
while(($row = self::db()->fetch_array($query))!==FALSE) {
$list[$row["pid"]] = $row["count"];
}
return $list;
}

數(shù)據(jù)結(jié)構(gòu)如下:

CREATE TABLE tmp_ssjj_zqwz (
id int(11) NOT NULL AUTO_INCREMENT COMMENT "自增編號(hào)",
uid int(11) NOT NULL COMMENT "投票id",
type int(11) NOT NULL DEFAULT "0" COMMENT "投票類型",
pid int(11) NOT NULL DEFAULT "0" COMMENT "被投票id",
PRIMARY KEY (id),
UNIQUE KEY unique_uid_type (uid,type),
KEY index_pid (pid)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=gbk;
加上索引,使用group by來統(tǒng)計(jì)數(shù)據(jù):

select pid,count(pid) as count from tmp_ssjj_zqwz group by pid

2.使用redis中的有序集合,直接解決問題:

value為"13453" score為13920,

value為"13454" score為12989,

...
一段代碼,直接搞定:

$list= $redis->zRange($_GET["key"], 0, -1);

最后,我是redis的fans。比較支持redis

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/61678.html

相關(guān)文章

  • [轉(zhuǎn)載] Redis、MongoDB及Memcached的區(qū)別

    摘要:?jiǎn)尉€程請(qǐng)求,所有命令串行執(zhí)行,并發(fā)情況下不需要考慮數(shù)據(jù)一致性問題。只能使用單線程,性能受限于性能,故單實(shí)例最高才可能達(dá)到取決于數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)大小以及服務(wù)器硬件性能,日常環(huán)境中高峰大約在左右。 1 基本概念 1.1 Redis(內(nèi)存數(shù)據(jù)庫) Redis是一個(gè)key-value存儲(chǔ)系統(tǒng)(布式內(nèi)緩存,高性能的key-value數(shù)據(jù)庫)。和Memcached類似,它支持存儲(chǔ)的value類型相對(duì)...

    jcc 評(píng)論0 收藏0
  • [轉(zhuǎn)載] Redis、MongoDB及Memcached的區(qū)別

    摘要:?jiǎn)尉€程請(qǐng)求,所有命令串行執(zhí)行,并發(fā)情況下不需要考慮數(shù)據(jù)一致性問題。只能使用單線程,性能受限于性能,故單實(shí)例最高才可能達(dá)到取決于數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)大小以及服務(wù)器硬件性能,日常環(huán)境中高峰大約在左右。 1 基本概念 1.1 Redis(內(nèi)存數(shù)據(jù)庫) Redis是一個(gè)key-value存儲(chǔ)系統(tǒng)(布式內(nèi)緩存,高性能的key-value數(shù)據(jù)庫)。和Memcached類似,它支持存儲(chǔ)的value類型相對(duì)...

    liaosilzu2007 評(píng)論0 收藏0
  • 現(xiàn)代軟件開發(fā)流程-by 12-Factor

    摘要:將開發(fā)環(huán)境和生產(chǎn)環(huán)境的差異降至最低,并使用持續(xù)交付實(shí)施敏捷開發(fā)。可以在工具架構(gòu)和開發(fā)流程不發(fā)生明顯變化的前提下實(shí)現(xiàn)擴(kuò)展。我們的初衷是分享在現(xiàn)代軟件開發(fā)過程中發(fā)現(xiàn)的一些系統(tǒng)性問題,并加深對(duì)這些問題的認(rèn)識(shí)。 簡(jiǎn)介 如今,軟件通常會(huì)作為一種服務(wù)來交付,它們被稱為網(wǎng)絡(luò)應(yīng)用程序,或軟件即服務(wù)(SaaS)。12-Factor 為構(gòu)建如下的 SaaS 應(yīng)用提供了方法論: 使用標(biāo)準(zhǔn)化流程自動(dòng)配置,從...

    draveness 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<