我想問下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可以存字串,數組,對象,整形多種類型,自動序列化。