0

我在将缓存对象的标识符保存在Zend_Cache. 必须对Zend_Cache标识符进行真正的清理(无特殊字符、无空格等)。我的一些内部标识符中有空格,所以保存缓存对象对我来说是个问题。

我正在考虑在保存之前使用 md5() 转换 zend_cache 标识符,例如:

$cacheId = md5(self::CACHE_PREFIX . $propertyId);

if (($address = $cache->load($cacheId)) === false) {
  .....
    $cache->save($cacheId, $address);
}

(例如,这里$propertyId可能是一个带空格的字符串)

我的问题是我创建的那些 md5 字符串有多独特?我的两个缓存对象有可能具有相同的标识符吗?有什么建议么?

4

1 回答 1

5

我的问题是我创建的那些 md5 字符串有多独特?

它们非常独特。但是,您拥有的 ID 越多,冲突的可能性就越大(您需要大量的条目!)。您也可以将生成的哈希放入不同的“命名空间”中,例如

$cacheId = 'addresses_' . md5(self::CACHE_PREFIX . $propertyId);

除了散列之外,您还可以考虑使用 ID 本身。你说,它们包含一些特殊字符。您可以对它们进行消毒,例如使用base64_encode()

于 2011-07-25T16:20:07.433 回答