Hola Danfe, espero no desvirtuar mucho este tema. El codigo que pegaste obtiene los valores desde la cache de MySQL??? y los cambia segun los valores encontrados dentro de la cache de MySQL?????. No entiendo mucho php , pero si este codigo trabaja en base a la cache de MySQL no indica que sea siempre efectivo.
Por ejemplo, no siempre la cache en MySQL esta activa (se puede iniciar con esta desabilitada) suponiendo que si, que esta activa mira un ejemplo de mi cache en MySQL y lo que te digo:
mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name | VALUE |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 16768408 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 4 |
[b]| Qcache_queries_in_cache | 0 |[/b]
| Qcache_total_blocks | 1 |
+-------------------------+----------+
8 ROWS IN SET (0.00 sec)
mysql> SELECT * FROM Libro;
mysql> SELECT * FROM Respuesta;
mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name | VALUE |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 16765336 |
| Qcache_hits | 0 |
| Qcache_inserts | 2 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 6 |
[b]| Qcache_queries_in_cache | 2 |[/b]
| Qcache_total_blocks | 7 |
+-------------------------+----------+
8 ROWS IN SET (0.00 sec)
| Qcache_queries_in_cache | 0 | | Qcache_queries_in_cache | 2 | Hago referencia al resultado en negrita obtenida de la cache (La cache en MySQL va guardando peticiones en memoria siempre que se use SELECT pero se resetea completamente al usar otra clausula (digase INSERT, DELETE, UPDATE)
mysql> INSERT INTO Libro VALUES(5,'no se', 'nananana');
Query OK, 1 ROW affected (0.00 sec)
mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name | VALUE |
+-------------------------+----------+
| Qcache_free_blocks | 2 |
| Qcache_free_memory | 16766872 |
| Qcache_hits | 0 |
| Qcache_inserts | 2 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 8 |
[b]| Qcache_queries_in_cache | 1 |[/b]
| Qcache_total_blocks | 5 |
+-------------------------+----------+
8 ROWS IN SET (0.00 sec)
| Qcache_queries_in_cache | 1 |Nuevamente recalco en la negrita, vez como elimino 1 registro del cache (que tenia 2 valores) al yo utilizar INSERT? si utilizo otra clausula como UPDATE o DELETE ese ultimo registro que queda tambien sera eliminado de cache, y al retornar a hacer un SELECT este nuevo dato volvera a guardarse en cache, y luego al usar insert, delete o update voila... a eliminar..
No es recomendable en situaciones donde haya mucha solicitud de escritura o actualizacion de una DB (Al menos MySQL) activar la cache del motor, es preferible tenerla en estos casos desactivada. Asi te evitas lecturas constantes de disco (tanto en escritura como lectura y eliminacion).