El título de esta pregunta no es tan claro, pero el código y la pregunta son claros.memcached: que es más rápido, haciendo un add (y comprobando el resultado), o haciendo un get (y configurado al devolver falso)
Digamos que quiero mostrar a mis usuarios un anuncio una vez al día. Para lograr esto, cada vez que visitan una página en mi sitio, verifico si una determinada clave de Memcache contiene datos almacenados en ella. Si es así, no muestres un anuncio. Si no es así, almacenar el valor '1' en esa llave con un vencimiento de 86400.
que puedo hacer esto 2 maneras:
//version a
$key='OPD_'.date('Ymd').'_'.$type.'_'.$user;
if($memcache->get($key)===false){
$memcache->set($key,'1',false,$expire);
//show ad
}
//version b
$key='OPD_'.date('Ymd').'_'.$type.'_'.$user;
if($memcache->add($key,'1',false,$expire)){
//show ad
}
Ahora, podría parecer obvio que b es mejor, que siempre hace 1 llamada de Memcache. Sin embargo, ¿cuál es la sobrecarga de "agregar" frente a "obtener"? Estas no son las comparaciones reales ... y acabo de inventar estos números, pero digamos 1 add ~ = 1 set ~ = 5 get en términos de esfuerzo, y el usuario promedio ve 5 páginas al día:
a: (5 get * 1 effort) + (1 set * 5 effort) = 10 units of effort
b: (5 add * 5 effort) = 25 units of effort
¿Tendría sentido hacer siempre la llamada de agregar? ¿Es esto una micro-optimización innecesaria?
¡buena pregunta! siempre puede escribir un caso de prueba rápido que ejecute ambos métodos 10000 veces para obtener una comparación rápida ... – oedo
Si el caché es un árbol binario bien equilibrado, el esfuerzo de concatenar la clave probablemente empequeñece el esfuerzo de la búsqueda. Y el esfuerzo de servir a la página probablemente hace que este código se vea como el planeta tierra cuando se ve la galaxia de la Vía Láctea sino el universo. –