【问题标题】:Resolving php unserialize error at offset in Redis caching解决 Redis 缓存中偏移处的 php 反序列化错误
【发布时间】:2013-06-25 13:43:44
【问题描述】:

我目前正在使用 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 处的字符是 ';'。该部分的字符串 sn-p 是 'Test 3\";s:7'。该字符串 sn-p 在 $cache_result 中也多次出现,但错误只出现在 8193 中。

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

【问题讨论】:

  • 尝试使用addlashes(),这样它就会在未检测到的字符之前添加/
  • 试试 $curArr[] = addlashes($row);而是只有 $curArr[] = $row;
  • 当我尝试 $curArr[] = addlashes($row); 时出现错误因为addlashes 期望一个字符串作为参数。我将它添加到 $this->redis->set($key,addslashes(serialize($curArr)));相反,但我仍然收到 unserialize() 错误。

标签: php redis


【解决方案1】:

为什么不这样做呢: $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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-11
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2018-09-24
    • 1970-01-01
    相关资源
    最近更新 更多