memcached integration idea + other ideas

Sergey Pofiriev parf at comfi.com
Fri Oct 6 23:08:01 MSD 2006


Memcached integration as a caching mechanism


MAIN IDEA:

1. caching layer
    if url + params or F(url,params) is in memcached return cached data 
w/o backend call
   
     F(x) - function such as crc32 / md5 / sha / ...

     location /dir {
          mem_cache on;  // activate cache check prior to backend query
    }

2. Static data auto caching:
    cache files according to criteria and specified timeout.
  
    Example: cache all gif / jpg (  /\.(jpg|gif)$/i  ) files for 10 minutes

    location ~* ^.+\.(jpg|jpeg|gif)$ {
       mem_cache on;                 //  turn on caching (#1)
       mem_cache_ttl 600;            //  default cache time
    }


3. Dynamic data caching:
    Cache files according to  X-cache header
  
    Example:
      header("X-cache: $timeout");   // cache url call for given timeout

4. Internal server redirects
    header("X-redirect: $timeout");

    same as in Java Servlets forward.
    a.    NGINX -> BACKEND1
    b.    backend returns X-redirect and URL in  REDIR_URL
    c.    NGINX -> REDIR_URL

    maybe this already implemented

5. Redirect to "hash key"
    When page returns X-redirect-cache header:
    Return page stored in memcached key (key = value of 
"X-redirect-cache" header)
    OR (if no page found)
    Internal redirect to  $no_key_url  and return content to caller
       in case of redirect server should pass "key" to $no_key_url ( as 
a header or as a GET field )

    header("X-redirect-cache: $key $no_key_url")

    Example:
    // guess what we want to show
    $page="index-".random_number( from => 1, to => 10)
    header("X-cache-key: $page /page-generator")






More information about the nginx-ru mailing list