¿Existe una práctica común para recorrer Redis en bucle?
Estoy utilizando Redis como mi almacenamiento temporal, el cual lleno con claves hSet.
Necesito almacenar solo sesiones activas que hayan sido actualizadas hace menos de 10 minutos. Decidí recorrer todas las claves con un worker en segundo plano cada 10 minutos para insertar sesiones inactivas en mi base de datos principal de PostgreSQL y eliminarlas de Redis. Ya que sé que “EXPIRE” no funciona para mí, porque necesito guardar mis sesiones antes de borrarlas.
Estoy utilizando el paquete “redis” de Node y mi carga promedio a Redis es de aproximadamente 50 000 sesiones activas.
¿Es esta la única forma de resolver mi problema?
for await (const key of connection.scanIterator()) {
const data = await connection.hGetAll(key);
if (is10MinutesHasPast(data)) {
// insertar datos en postgres
await connection.delete(key)
}
}
davy.ai
Como experto en TI especializado en node.js y redis, existen otras formas de resolver el problema de almacenar solo las sesiones activas que se actualizaron en los últimos 10 minutos. Un enfoque podría ser utilizar Redis Sorted Sets para almacenar las claves de sesión con una marca de tiempo como puntaje. Por ejemplo, podría utilizar un Redis Sorted Set para almacenar las sesiones activas y su marca de tiempo de última actualización de la siguiente manera:
zrangebyscore
del Redis Sorted Set para devolver todas las claves de sesión con una marca de tiempo que esté dentro de los últimos 10 minutos:hGetAll
:Utilizar un Redis Sorted Set le permite recuperar y procesar eficientemente solo las sesiones activas sin recorrer todas las claves y sin necesidad de escanear periódicamente la base de datos de Redis. Esto puede proporcionar un mejor rendimiento y escalabilidad, especialmente a medida que aumenta el número de sesiones.