php中memcached怎麼存多維陣列

來源:互聯網
上載者:User
我想問下php中memcached怎麼存多維陣列?
比如我想緩衝多個使用者發的文章標題,數組形式是這樣的:

php$user1=array(    array('title'=>'文章1','time'=>'2015-07-08'),    array('title'=>'文章2','time'=>'2015-07-09'),);

假設user1的UID是1001,我想通過UID得到他所發的文章緩衝,不知道怎麼弄。
另外Redis裡面也能用嗎?
求大蝦指點,感激不盡。

回複內容:

我想問下php中memcached怎麼存多維陣列?
比如我想緩衝多個使用者發的文章標題,數組形式是這樣的:

php$user1=array(    array('title'=>'文章1','time'=>'2015-07-08'),    array('title'=>'文章2','time'=>'2015-07-09'),);

假設user1的UID是1001,我想通過UID得到他所發的文章緩衝,不知道怎麼弄。
另外Redis裡面也能用嗎?
求大蝦指點,感激不盡。

PHP的Memcached的驅動會自動進行serialize和unserialize,你所需要做的是:
1. 選取一個合適key,比如 "POST_OF_USER_" . $userId
2. 調用set函數把資料丟進去就行了

範例程式碼:

// 0. 準備:$cache = new Memcache();$cache->connect('127.0.0.1', 11211); // 請替換為你的memcache伺服器位址和連接埠$userId = // 你自己想辦法擷取...// 1. 構造cache KEY$cacheKey = "POSTS_OF_USER_" . $userId;// 2. 從緩衝中擷取資料$posts = $cache->get($cacheKey);if ($posts === false){     // 3. 緩衝失效了,載入資料    $posts = // 你自己想辦法載入資料    // 4. 儲存資料到緩衝中    $cache->set($cacheKey, $posts);    }// OK,可以使用posts了

1.memcache或者redis索引值只能是字串或者整型數組,所以數組必須序列化
2.serialize,json_encode皆可以序列化
3.PHP建議用serialize

    $array  = array();    $string = serialize($array);    $memcache->set('key',$string);    $result = $memcache->get('key');    $result = unserialize($result);

array('user1Id'=>array(                        array('title'=>'文章1','time'=>'2015-07-08'),                        array('title'=>'文章2','time'=>'2015-07-09')                       ),       'user2Id'=>array()      )

這樣可否

key:prefix + userIdvalue:[{"title":"\u5e16\u5b501","time":"2015-07-08"},{"title":"\u5e16\u5b502","time":"2015-07-09"}]

memcache只支援基本的資料存放區,如字串,不支援複雜結構如map等
所以結構化的資料,可以序列化後作為值儲存。
序列化的方法有很多,比如json_encode();

數組不用轉成字串,直接存數組就行了

我是使用 json_encode 配合 urlencode 來序列化結果集,之後再儲存在memcache中

memcache的話,建議序列化或者json_encode成string之後進行儲存。redis有更豐富的資料類型,也可以考慮,hashset。

轉成json字串扔進去

你可以直接存資料進去都是可以的,Mecached擴充底層會幫你處理的。

多個使用者是多少? 如果是可知的 推薦還是用json_encode()後,存入到memcache中,按三維數組的結構,並不推薦serialize

看看官方樣本吧,不需要自己把數組進行序列化:

addServer('localhost', 11211);$m->set('int', 99);$m->set('string', 'a simple string');$m->set('array', array(11, 12));/* 'object'這個key將在5分鐘後到期 */$m->set('object', new stdclass, time() + 300);var_dump($m->get('int'));var_dump($m->get('string'));var_dump($m->get('array'));var_dump($m->get('object'));?>

memcached可以存字串,數組,對象,整形多種類型,自動序列化。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.