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的数据是否一致,晚一些测试