¿Más detalles sobre cómo se utiliza la caché de Redis?

¡Hola!

He estado realizando algunas pruebas de carga en una instancia de Discourse y noté que, al recuperar repetidamente el mismo hilo de comentarios una y otra vez, la tasa de aciertos en la caché de Redis disminuyó en lugar de aumentar, lo cual fue un poco inesperado (para una mezcla de lecturas/escrituras vimos una tasa de aciertos de hasta el 85%, pero para lecturas al 100% cayó hasta un 22%).

He buscado en el código y en los foros aquí, pero no me queda del todo claro cómo se utiliza exactamente la caché de Redis. El README dice lo siguiente:

Usamos Redis como caché y para datos transitorios.

Utilicé redis-cli para volcar los comandos que se enviaron a la caché de Redis durante la prueba de carga mencionada anteriormente, y principalmente vi comandos “get” para trabajos programados y para claves con el prefijo “__mb_backlog_id_n_” (creo que esto se refiere a cosas de MessageBus).

Tengo las siguientes preguntas:

  • ¿Existe una forma “fácil” de buscar en el código qué partes de los datos se almacenan en caché en Redis? Me encantaría poder responder estas preguntas por mi cuenta, pero desafortunadamente no estoy muy familiarizado con las aplicaciones Ruby on Rails (o con Ruby en general, la verdad). :slight_smile:
  • ¿Influye el estado de inicio de sesión (logueado/deslogueado) en las tasas de aciertos de la caché? Como referencia, la prueba de carga mencionada anteriormente utilizaba una clave de API de administrador.
  • ¿Se almacenan en caché en Redis datos frecuentemente consultados o bastante estáticos, como el contenido de los mensajes? ¿O se utiliza Redis principalmente para la programación de trabajos y el procesamiento en segundo plano con Sidekiq y cosas así?

¡Gracias de antemano!

Este es el punto principal. La caché más agresiva ocurre en las solicitudes anónimas, por lo que te sugiero repetir la prueba de carga con algunos robots anónimos.

Hay un puñado de métodos que se pueden buscar con grep, como Discourse.cache.fetch y DistributedCache.new.

Sí, almacenamos en caché algunos bloques de configuración poco frecuentes, pero el enfoque para los temas consiste principalmente en cachear toda la respuesta para los usuarios anónimos, lo que permite que la aplicación genere una respuesta apenas tocando la base de datos.

Redis se utiliza intensivamente para Sidekiq y MessageBus.

¡Genial, gracias por la respuesta tan útil!

Acabo de volver a ejecutar la prueba de carga, pero esta vez con solicitudes anónimas, y ¡hemos observado una enorme mejora en el rendimiento! Antes solo podíamos manejar alrededor de 25 solicitudes por segundo en un solo host; ahora podemos alcanzar 380. Además, la tasa de aciertos de la caché Redis aumentó de ~22% a ~66%. :slight_smile:

Solo quería compartir los resultados por si a alguien le interesaba.

¡Gracias de nuevo por la ayuda!