sql >> Base de Datos >  >> NoSQL >> Redis

Rendimiento de Redis vs Disk en la aplicación de almacenamiento en caché

Esta es una comparación de manzanas con naranjas. Consulte http://redis.io/topics/benchmarks

Redis es un remoto eficiente Almacén de datos. Cada vez que se ejecuta un comando en Redis, se envía un mensaje al servidor de Redis y, si el cliente es sincrónico, se bloquea esperando la respuesta. Entonces, más allá del costo del comando en sí, pagará un viaje de ida y vuelta a la red o un IPC.

En el hardware moderno, los viajes de ida y vuelta de la red o IPC son sorprendentemente costosos en comparación con otras operaciones. Esto se debe a varios factores:

  • la latencia bruta del medio (principalmente para la red)
  • la latencia del programador del sistema operativo (no garantizado en Linux/Unix)
  • los errores de caché de memoria son costosos y la probabilidad de errores de caché aumenta mientras los procesos del cliente y del servidor están programados de entrada/salida.
  • en cajas de gama alta, efectos secundarios de NUMA

Ahora, revisemos los resultados.

Comparando la implementación que usa generadores y la que usa llamadas a funciones, no generan la misma cantidad de viajes de ida y vuelta a Redis. Con el generador simplemente tienes:

    while time.time() - t - expiry < 0:
        yield r.get(fpKey)

Entonces 1 ida y vuelta por iteración. Con la función, tienes:

if r.exists(fpKey):
    return r.get(fpKey)

Así que 2 viajes de ida y vuelta por iteración. No es de extrañar que el generador sea más rápido.

Por supuesto, se supone que debe reutilizar la misma conexión Redis para un rendimiento óptimo. No tiene sentido ejecutar un punto de referencia que conecta/desconecta sistemáticamente.

Finalmente, con respecto a la diferencia de rendimiento entre las llamadas de Redis y las lecturas de archivos, simplemente está comparando una llamada local con una remota. El sistema de archivos del sistema operativo almacena en caché las lecturas de archivos, por lo que son operaciones rápidas de transferencia de memoria entre el kernel y Python. No hay E/S de disco involucradas aquí. Con Redis, debe pagar el costo de los viajes de ida y vuelta, por lo que es mucho más lento.