PHP中的数组查找速度;长缓存键


Array lookup speed in PHP; long cache keys

我正在研究一个方法,由于它的操作费用和使用相同参数调用的频率,将受益于缓存返回值。

我将对缓存键的参数进行serialize() -ing,但这可能导致非常长的键,由于冗长的数组参数。

    PHP数组索引和查找是否受到如此长的键(认为从250B到1kB+)的影响?到目前为止一切都很好,但我是否面临着这种情况,在某些时候,这可能会在我身上惨败?基本上,我应该md5() (或替代)键吗?

小澄清:
这只是针对每个请求的缓存,没有永久存储。这里讨论的方法是视图助手的方法,对于每个视图生成,它可能被调用500次或更多。

一定要散列键。你可能会说:"当我可以在每个时间点连接一个唯一的键时,我为什么要冒冲突的风险?"简单的答案是,如果您通过字符串连接生成缓存键,则必须始终计算最坏情况下的空间需求,以估计ram使用情况。

所以如果你有一个有200个条目的缓存…和2个字段与20个字符的最大字符串。最坏的情况是200*2*20*(size of character)。如果在每个可能的并行连接上加载完整的缓存,这将乘以并行连接的数量。

对于散列,关键字段的最小内存需求=最大内存需求

如果你有许多键连接的值,这将是非常糟糕的缩放

编辑:

即使每次请求都使用它,数组也会消耗内存。虽然它是一个缓存,但它从请求的开始到结束都存在。所以你需要考虑到它在你的内存中消耗一定数量的空间,而使用哈希时它是固定数量的。

第二件事是需要比较键。如果使用字符串键访问关联数组,解释器需要按顺序比较键。如果您使用散列方法来生成密钥,那么这也是固定数量的步骤。

如果使用串联,则步数将介于最佳和最差情况之间。

具有如此长的数组键当然不常见,但是您可能必须进行基准测试以猜测它实际会带来多少减速。如果有疑问,就md5吧——从你所说的加速速度仍然会比md5时间多,后者将是微不足道的。