我将大量日志数据存储在内存缓存中,以便稍后放入数据库。在对服务器的每个请求中,我使用 memcached::append() 保存一组数据,并使用换行符来分隔块。简化版本如下所示:
$myCache->append('log', serialize($myArray)."\n");
稍后当我想构建可能查询时,我将所有行从数据库中拉出并反序列化每一行:
$dataToInsert = explode("\n", $myCache->get('log'));
$dataToInsert = array_map(function($row) {
return unserialize($row);
}, $dataToInsert);
这适用于内置的 serialize() 和 unserialize(),但我想利用 igbinary 的明显优势 - 大小和速度。不幸的是,当我替换函数的 igbinary 版本时,我得到了错误。
似乎 igbinary 序列化数据可以包含“\n”字符,所以当我分解隐藏的数据时,它会创建部分行,当然会失败。
除了换行符之外,我是否可以使用分隔符来分隔 igbinary 数据块,或者 igbinary 和 append() 从根本上不兼容?