我在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字符串有多独特?我的两个缓存对象是否可能具有相同的标识符?有什么建议吗?
答案 0 :(得分:5)
我的问题是我创建的md5字符串有多独特?
他们非常独特。但是,您拥有的ID越多,碰撞就越可能(您需要非常大量的条目!)。您还可以将生成的哈希值放入不同的“名称空间”,如
$cacheId = 'addresses_' . md5(self::CACHE_PREFIX . $propertyId);
您也可以考虑使用ID本身而不是哈希。你说,它们包含一些特殊字符。你可以消毒他们,例如使用base64_encode()