Estoy generando una clave de caché con nginx basada en el URI de solicitud y parámetros de consulta que verifican Memcache directamente y luego sirven la página de PHP-FPM si no se encuentra una clave de caché. Mi problema es que muchas URL tienen opciones de cadena de consulta que vienen en diferentes órdenes y generan dos o más claves de caché separadas por respuesta.Caché de Nginx con orden de parámetro variable
Mi configuración de caché es algo así como:
set $cache_key "$uri?$args";
Así URL que vienen en como estos con parametros de cadena de consulta en diferentes órdenes terminan generando múltiples claves de caché posibles para el mismo tipo:
http://example.com/api/2.2/events.json?id=53&type=wedding&sort=title&limit=10
http://example.com/api/2.2/events.json?id=53&limit=10&type=wedding&sort=title
http://example.com/api/2.2/events.json?id=53&limit=10&sort=title&type=wedding
Ad nauseum for n! posibilidades ...
El resultado final es que la memcache a menudo se llena mucho más rápido de lo debido porque tengo un potencial n! -1 copias duplicadas de contenido en caché simplemente porque los parámetros de cadena de consulta vienen en un orden diferente. ¿Hay alguna manera de ordenarlos alfabéticamente antes de configurar la clave de caché para evitar esto? ¿Hay otras maneras de resolver este problema elegantemente?
El problema es que hay muchas, muchas posibles llamadas a la API, cada una con su propio conjunto de parámetros. Algunos de ellos son más globales como 'limit', pero la mayoría de ellos dependen de las llamadas API. Gracias por el enlace de Perl incrustado: lo verificaré mientras espero otras soluciones. –