批量獲取數(shù)據(jù)

php版——未測試過,僅做思路參考~

  • 使用時瀑晒,繼承此類并實現(xiàn)對應方法
    <?php
    /**
     * 適用于在緩存中按key-value 的方式存儲對象且設置過期時間蹲嚣,db做為持久化存儲
     * web 應用的瓶頸主要為網(wǎng)絡io, 因此網(wǎng)絡操作時盡量要節(jié)省請求次數(shù)赚瘦,如使用批量操作、redis 的pipeline 等方式來優(yōu)化寺谤,可參考:
     * http://www.reibang.com/p/f722faf010fa
     *
     * User: xjyin
     * Date: 15/11/5
     * Time: 下午6:30
     */

    abstract class BatchGetter {

        protected $ids;

        function _construct($ids) {
            $this->ids = $ids;
        }

        // 返回的array長度必須等于count($ids)仑鸥,實現(xiàn)時不要用循環(huán)多次獲取,
        // 要用select a, b, c from table where id in (id1, ..., idn)
        // 注意:上面的sql 返回的數(shù)據(jù)的個數(shù)及順序會與$ids不一致变屁,獲取到之后需要重新整理再返回
        abstract protected function getFromDB($ids);

        // 返回的array長度必須等于count($ids)
        // 實現(xiàn)時需要使用redis的pipeline來操作, 避免循環(huán)調用多次redis.get(key)眼俊,用了sharding的話需要使用shardedPipeline
        // 給redis封裝如下方法:
        // get(keys)
        // set(keys, objects)
        // zAdd(key, map)
        // hGetAll(keys)
        // hSet(keys, objects)
        // ...
        abstract protected function getFromCache($ids);

        abstract protected function setToCache($ids, $objects);

        public function exec() {
            if(count($this->ids) == 0) {
                return array();
            }
            $results = $this->getFromCache($this->ids);
            $length = count($this->ids);
            $missedIds = array();
            $missedIndexes = array();
            // 找到未從緩存中獲取到的數(shù)據(jù)
            for($i = 0; $i < $length; $i++) {
                if(!$results[i]) {
                    array_push($missedIds, $this->ids[$i]);
                    array_push($missedIndexes, $i);
                }
            }
            $missedIdsLength = count($missedIds);
            if(count($missedIdsLength) != 0) {
                // 從db中獲取未從緩存中獲取的數(shù)據(jù),并按missIndex放置到results中
                $dbResults = $this->getFromDB($missedIds);
                for($i = 0; $i < $missedIdsLength; $i++) {
                    $results[$missedIndexes[$i]] = $dbResults[$i];
                }
                $this->setToCache($missedIds, $dbResults);
            }
            return $results;
        }
    }
  • 另粟关,盡量要合并網(wǎng)絡操作疮胖,如:

      原有邏輯:
          $redis->set($key, json_encode($data));
          $redis->expire($key, $ttl);
      優(yōu)化邏輯:
          $redis->set($key, json_encode($data), $ttl);
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市闷板,隨后出現(xiàn)的幾起案子澎灸,更是在濱河造成了極大的恐慌,老刑警劉巖遮晚,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件击孩,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹏漆,警方通過查閱死者的電腦和手機巩梢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艺玲,“玉大人括蝠,你說我怎么就攤上這事》咕郏” “怎么了忌警?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長秒梳。 經(jīng)常有香客問我法绵,道長,這世上最難降的妖魔是什么酪碘? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任朋譬,我火速辦了婚禮,結果婚禮上兴垦,老公的妹妹穿的比我還像新娘徙赢。我一直安慰自己字柠,他們只是感情好,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布狡赐。 她就那樣靜靜地躺著窑业,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枕屉。 梳的紋絲不亂的頭發(fā)上常柄,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音搀擂,去河邊找鬼拐纱。 笑死,一個胖子當著我的面吹牛哥倔,可吹牛的內容都是我干的。 我是一名探鬼主播揍庄,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼咆蒿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚂子?” 一聲冷哼從身側響起沃测,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎食茎,沒想到半個月后蒂破,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡别渔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年附迷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哎媚。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡喇伯,死狀恐怖,靈堂內的尸體忽然破棺而出拨与,到底是詐尸還是另有隱情稻据,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布买喧,位于F島的核電站捻悯,受9級特大地震影響,放射性物質發(fā)生泄漏淤毛。R本人自食惡果不足惜今缚,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望低淡。 院中可真熱鬧荚斯,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至兽泣,卻和暖如春绎橘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唠倦。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工称鳞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稠鼻。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓冈止,卻偏偏與公主長得像,于是被迫代替她去往敵國和親候齿。 傳聞我的和親對象是個殘疾皇子熙暴,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內容

  • 1.1 資料 ,最好的入門小冊子慌盯,可以先于一切文檔之前看周霉,免費。 作者Antirez的博客亚皂,Antirez維護的R...
    JefferyLcm閱讀 17,071評論 1 51
  • NOSQL類型簡介鍵值對:會使用到一個哈希表俱箱,表中有一個特定的鍵和一個指針指向特定的數(shù)據(jù),如redis灭必,volde...
    MicoCube閱讀 4,001評論 2 27
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理狞谱,服務發(fā)現(xiàn),斷路器禁漓,智...
    卡卡羅2017閱讀 134,717評論 18 139
  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)璃饱、高可擴展与斤、高可用、大數(shù)據(jù)存儲問題而產(chǎn)生的數(shù)據(jù)庫解決方...
    克魯?shù)吕?/span>閱讀 5,309評論 0 36
  • 飯后荚恶,溫一盞茶撩穿,依窗,看遠方蔥蘢的景谒撼,隔著窗感受陽光的溫熱食寡。老媽樓前的不遠處,有著一棟三層的舊樓廓潜,蒼老的樓墻抵皱,...
    那些年聆聽的閱讀 146評論 0 0