在Redis缓存中解决偏移量的php unserialize错误

时间:2013-06-25 13:43:45

标签: php redis

我目前正在使用Redis来缓存我的数据库结果。我所做的是将db结果放入一个数组并序列化数组,然后将它们作为值添加到Redis缓存中的键中。

$res = $this->db->query($qry);
foreach($res->result() as $row) {
  $curArr[] = $row;
}
$this->redis->set($key, serialize($curArr));

但是,每当我反序列化缓存时,它都会在偏移量中返回错误。

$cache_result = $this->redis->get($key);
$curArr = unserialize($cache_result);

Message:  unserialize(): Error at offset 8193 of 8701 bytes

当我检查$ cache_result时,字符串的长度是8702,而8194处的字符是';'。该部分的字符串片段是'Test 3 \“; s:7'。$ cache_result中也出现了各种字符串片段,但错误只出现在8193中。

非常感谢您的帮助!谢谢!

1 个答案:

答案 0 :(得分:0)

为什么不这样做呢: $res = $this->db->query($qry); foreach($res->result() as $row) { $curArr[] = $row;
} $this->redis->set($key, json_encode($curArr));

检索时:

  

$ cache_result = $ this-> redis-> get($ key);

     

$ curArr = json_decode($ cache_result);