msgpack_pack和redis的诡异事


set进去redis的数据,未经过msgpack_pack之前是相同的,从redis取出来的数据会不同
查找相关文章:msgpack_pack redis

set进去redis的数据,未经过msgpack_pack之前是相同的,

从redis取出来的数据会不同

导致msgpack_unpack失败,报502错误

function get_full_table(){
        if(isset($this->tmp_menu_table)){
            return $this->tmp_menu_table;
        }

        if(!isset($this->redis)){
            $this->load->library('redis', array('connection_group'=>'default'));
        }

        $t = $this->redis->get('cache_menu_list');
        
        //echo strlen($t);exit; 经测试$t获取的长度时候不同

        if($t && !empty($t)){
            //此处会报502错误 
            $this->tmp_menu_table = msgpack_unpack($t);
            return $this->tmp_menu_table;
        }

        $this->db->order_by('order_no');
        $result = $this->db->get($this->_table_name)->result();

        $arr = array();
        foreach ($result as $k=>$v) {
            $arr[$v->menu_id] = $v;
        }

        $this->redis->set('cache_menu_list', msgpack_pack($arr));
        $this->tmp_menu_table = $arr;

        return $arr;
    }

改用serialize和unserialize未再报过502错误

由此可以肯定是msgpack_pack的问题

当然也可能是msgpack跟redis的兼容问题

看来虽然msgpack的压缩虽然大些,但并不适合正式场合用途


尚未测试每次msgpack_pack的数据是否一致,晚一些测试