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文字列がどれほどユニークかということです。2つのキャッシュオブジェクトが同じ識別子を持つ可能性はありますか?助言がありますか?

4

1 に答える 1

5

私の質問は、私が作成しているmd5文字列がどれほどユニークかということです。

彼らは非常にユニークです。ただし、IDが多いほど、衝突が発生する可能性が高くなります(非常に多くのエントリが必要です!)。また、生成されたハッシュを次のようなさまざまな「名前空間」に配置することもできます。

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

ハッシュの代わりに、ID自体を使用することも考えられます。あなたは、それらがいくつかの特殊文字を含んでいると言いました。あなたはそれらを消毒することができます例えば使用してbase64_encode()

于 2011-07-25T16:20:07.433 に答える