国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

php - redis 保存數(shù)組(json_encode不成功,serialize成功)
高洛峰
高洛峰 2017-04-11 10:34:52
0
4
872

要用redis存數(shù)組,string類型的方式存儲(chǔ)。
使用PHP自帶的json_encode和json_decode轉(zhuǎn)換成json(失?。?。
PHP自帶的序列化函數(shù)serialize和unserialize函數(shù)(成功)。
有什么具體的差別嗎?有大俠講一下成功和失敗的原理嗎

高洛峰
高洛峰

擁有18年軟件開(kāi)發(fā)和IT教學(xué)經(jīng)驗(yàn)。曾任多家上市公司技術(shù)總監(jiān)、架構(gòu)師、項(xiàng)目經(jīng)理、高級(jí)軟件工程師等職務(wù)。 網(wǎng)絡(luò)人氣名人講師,...

reply all(4)
劉奇

看上去和 redis 關(guān)系不大吧。set 和 get 的 JSON 字符串應(yīng)該是一致的吧。

你可以直接先把 json_encode 的字符串直接 json_decode 的結(jié)果打印出來(lái)看看。

我猜有可能是 json_decode($str, true) 少了參數(shù)寫(xiě)成 json_decode($str) 了,導(dǎo)致結(jié)果是一個(gè)對(duì)象而不是數(shù)組。

PHPzhong

序列化和JSON本質(zhì)上不是一回事, json是種數(shù)據(jù)格式

序列化是指把運(yùn)行環(huán)境中的數(shù)據(jù)對(duì)象轉(zhuǎn)化為流數(shù)據(jù), 使之可以保存到文件或網(wǎng)絡(luò)傳輸?shù)絼e的地方使用.
這個(gè)流數(shù)據(jù)經(jīng)反序列化, 會(huì)還原為該語(yǔ)言下的數(shù)據(jù)對(duì)象
每個(gè)語(yǔ)言都有自己的序列化方法

php 有比serialize更高效的方法, 便是
igbinary_serialize() 和
igbinary_unserialize()
這兩方法需要安裝ibginary模塊
使用redis時(shí)配置

$reids->setOption(Redis::OPT_SERIALIZER,Redis::SERIALIZER_IGBINARY);

redis自動(dòng)會(huì)進(jìn)行序列化處理, 而不要每次都序列化后再set, 每次get后都要反序列化

關(guān)于序列化, 拿PHP來(lái)說(shuō)

class Person{
    private $_name = "default";
    public function get_name(){
        return $this->_name;
    }
}

$p = new Person;
$sp = serialize($p);

send2serverB($p);

你在A服務(wù)器序列化了一個(gè)對(duì)象實(shí)例, 在服務(wù)B中要使用該實(shí)例
當(dāng)然, 服務(wù)器B中也需要有類 Person的聲明, 才能正常反序列化

function recieve_handle($sp){
   $p = unserialize($p);
   // 反序列后, 能還原Person實(shí)例, 能使用實(shí)例的方法
   // json只是種保存元數(shù)據(jù)的格式, 無(wú)法保存對(duì)象
   $name = $p->get_name();
}

因?yàn)閿?shù)據(jù)要保存或傳輸(所謂的I/O), 所以才有序列化一說(shuō)
json是種常用的數(shù)據(jù)流格式, 但它只能存元數(shù)據(jù), 無(wú)法表達(dá)復(fù)雜的對(duì)象屬性和方法

小葫蘆

注意數(shù)據(jù)必須是utf8,
gbk是encode不了的

大家講道理

就是json_encode不能序列話對(duì)象

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template