序列化引擎php,PHP序列化替代

我正在为APC寻找一个好的缓存密钥,它代表一些关于对象的编译信息,使用“对象”作为密钥.我有一个编译方法,它做这样的事情:

function compile(Obj $obj)

{

if ($this->cache)

{

$cachekey = serialize($obj);

if ($data = $this->cache->get($obj))

{

return $data

}

}

// compute result here

if ($this->cache)

{

$this->cache->set($cachekey, $result);

}

return $result;

}

如果不明显,$this-> cache是​​具有get和set方法的接口的实现.

是否有更快的替代方法来创建对象的某些属性所特有的键?我可以提取相关的位,但是它们仍然是数组,这与我首先使用对象的序列化具有相同的问题.

Serialize从“正确”位置开始工作,但看起来很浪费(输出密钥的大小和计算复杂性).

编辑:我还想补充说,如果不是很明显,我将不需要反序列化这个对象.我当前缓存键的逐字代码实际上是:

$cachekey =’compile.’ . SHA1(连载($OBJ));.

编辑2:我正在使用的对象具有以下定义:

class Route

{

protected $pattern;

protected $defaults = array();

protected $requirements = array();

}

模式和要求是将更改此方法的输出的对象的值,因此这些值的哈希值必须存在于缓存键中.

此外,有人建议使用uniqid(),这会破坏通用缓存查找键的目的,因为您无法从相同的信息中可靠地重新生成相同的ID.

编辑3:我想我没有提供足够的背景.这是到目前为止代码的链接:

我想我真的只是想避免昂贵的序列化调用(我猜sha1,这也有点贵).我能做的最好的事情是尝试减少我序列化的大小…

解决方法:

一种方法可能是简单地根据用于计算结果的值生成密钥.

这是一个粗略的例子.

function compile(Obj $obj)

{

if ($this->cache)

{

$cachekey = 'Obj-result-' . sha1($obj->pattern . '-' . serialize($obj->requirements));

// You could even try print_r($obj->requirements, true)

// or even json_encode($obj->requirements)

// or implode('-', $obj->requirements)

// Can't say for sure which is slowest, or fastest.

if ($data = $this->cache->get($cachekey))

{

return $data

}

}

// compute result here

$result = $obj->x + $obj->y; // irrelevant, and from original answer.

if ($this->cache)

{

$this->cache->set($cachekey, $result);

}

return $result;

}

既然你使用了一个数组,你仍然需要把它变成一个有意义的东西.但是这样你现在只是序列化一部分对象,而不是整个事物.看看它如何.

标签:php,optimization,serialization

来源: https://codeday.me/bug/20190704/1378893.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值