How does Nginx look-up cached resource?

Maxim Dounin mdounin at mdounin.ru
Fri Sep 4 13:23:30 UTC 2015


Hello!

On Thu, Sep 03, 2015 at 06:39:49PM -0700, Shuxin Yang wrote:

>     I'm Nginx newbie. I have a question regarding how nginx lookup a cached
> resource.
> 
>     As far as I can tell, given a cache-key k. Nginx uses crc32(k) as as the
> key to lookup
> the cached resource in a RB tree, and use md5(k) verify if conflict take
> place; the
> key k per se is not used for looking up resource. Is my understanding
> correct?

No, vice versa.

MD5 is used to identify a resource, and CRC32 is used to 
additionally verify if there are any collisions.  If any collision 
is detected, nginx will complain loudly.

As of now, the only case when the message about a collision was 
seen, it was the result of a bug, not a collision.

> If so, how can we guarantee that crc32 and md5 combined can uniquely
> identify a resource?

We can't.  Collisions are unavoidable if you use a hash function 
with more inputs than outputs.  The question is how often 
collisions are observed in practice.

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx-devel mailing list