Redis admite iteradores basados en cursor. Estos iteradores pueden recorrer incrementalmente la colección y devolver un número limitado de elementos. Al mismo tiempo, devuelve el índice/ID de cursor actualizado como entero para usar en la siguiente iteración. Un cursor es un puntero mantenido por el iterador para mantener la nueva ubicación después de cada iteración.
El iterador de escaneo
El comando de escaneo es la base para muchos otros redis iteradores. Este iterador no garantiza el número de elementos devueltos en cada bucle. Podría devolver 0 elementos o todos los elementos en una iteración dada. Además, podría producir el mismo elemento varias veces porque la colección podría cambiar, que es un inconveniente en el iterador de escaneo. El comando de escaneo devuelve dos valores en cada ejecución. El primer valor es una identificación de referencia al cursor, y el segundo valor es una colección de elementos. Siempre comienza desde el cursor 0. Varios otros iteradores se derivan del iterador de escaneo, como SSCAN, HSCAN y ZSCAN. Estos comandos tienen el mismo comportamiento pero operan en diferentes tipos de colecciones.
La iteración completa
Dado que el comando de escaneo no garantiza el número de elementos devueltos en cada iteración, la única forma de notificar que el iterador se ha recorrido a través de toda la colección es verificar el ID o el índice de referencia del cursor devuelto en cada ejecución. Si el cursor devuelto es 0, indica que todos los elementos han sido iterados. Se llama iteración completa.
El comando sscan
El iterador SSCAN se deriva del iterador de escaneo. Por lo tanto, todos los comportamientos se extienden desde el comando de escaneo, pero solo itera sobre los tipos de configuración.
Sintaxis
SSCAN SET_KEY CURSOR [Patrón de coincidencia] [recuento de conteo]set_key: Esta es la clave del set.
cursor: ID de referencia del siguiente cursor, que se devuelve después de cada llamada.
La coincidencia y el recuento son dos parámetros opcionales que se pueden usar para filtrar los elementos devueltos en función de un patrón dado y limitar el número de elementos devueltos.
Este comando devolvería el siguiente cursor y una variedad de elementos. La ID del cursor devuelta se puede pasar al comando SSCAN en la siguiente llamada.
Ejemplo 1: iterar sobre un conjunto pequeño
Creemos un conjunto Redis usando el comando SADD.
sadd setOfcolors rojo verde blanco blanco color rosa gris naranja color púrpura amarilloEl comando anterior creará un nuevo conjunto setofcolors y agregar 10 miembros de manera desordenada. Podemos usar el comando smembers para verificar la operación anterior.
smembers setofcolorsComo se esperaba, el set setofcolors ha sido creado con éxito.
Podemos usar el comando sscan para iterar sobre el setofcolors Establecer como se muestra en lo siguiente:
sscan setofcolors 0Como se mencionó, el comando debe comenzar con el cursor 0. La clave del conjunto también ha pasado. Desde el setofcolors Contiene solo 10 miembros, el comando sscan podría devolver todos los elementos en la primera iteración. Porque el setofcolors es un conjunto relativamente pequeño.
Producción
Como se discutió, el comando devolvió dos valores ya que el primero es 0. Significa que lo anterior es una iteración completa. No hay necesidad de volver a llamar a SSCAN. Los diez miembros han sido devueltos como el segundo valor de retorno de este comando.
Ejemplo 2: iterar sobre un gran set
Estaremos creando un set con más de 20 miembros.
Sadd Alphabet A B C D E F G H I J K L M N O P Q R S T U V W X Y ZVamos a iterar sobre el alfabeto colocar.
alfabeto sscan 0Como de costumbre, hemos comenzado con el cursor 0. Además, la clave establecida se ha pasado como la alfabeto. Solo devolvió a 11 miembros de la primera iteración, como se muestra en lo siguiente:
El siguiente cursor es 6. Vamos a llamar al comando sscan nuevamente con los argumentos relevantes.
Ahora, devolvió otros 10 miembros y el próximo cursor como 13. Tenemos que llamar al comando sscan nuevamente para finalizar la iteración completa.
El valor del cursor devuelto es 0, lo que significa que el iterador ha iterado a través de todo el conjunto.
Ejemplo 3: coincidencia de patrones con sscan
Podemos usar el parámetro de coincidencia para filtrar los miembros devueltos en función de un patrón especificado. Creemos un nuevo conjunto llamado nombre de usuario con algunos miembros.
Sadd Names de usuario John Norek Pinku Juwana Jorgia Noton Derek Desman Julia Jumini Piter Pinso DemianLlamaremos al comando sscan con el argumento del partido para obtener todos los nombres de usuario que comienzan con "Ju".
SSCAN USERNAMES 0 Match Ju*Producción
Tenemos tres nombres de usuario a partir de "Ju" en el set. Pero ha devuelto solo uno en esta iteración. Por lo tanto, necesitamos volver a llamar al comando sscan con el cursor actualizado.
SSCAN USERNAMES 7 Match Ju*Producción
El iterador ha recorrido todos los elementos en el conjunto, y tenemos tres miembros que coinciden con nuestro patrón.
Ejemplo 4: Limite el número de elementos por llamada
El comando Redis SSCAN devuelve alrededor de diez elementos por llamada de forma predeterminada, pero puede especificar explícitamente el número de elementos que se devolverán por llamada. Que puede dar un impulso de rendimiento considerable a su aplicación.
Usemos el conjunto anterior y limitemos el número de elementos devueltos por llamada a tres. Por lo general, el recuento de elementos devueltos fluctuará alrededor de las 3. Podemos especificar el valor del argumento de recuento para lograr este comportamiento.
SSCAN nombres de usuario 0 recuento 3Producción
Por lo general, devuelve alrededor de 10 miembros, pero ahora son solo 4 elementos. Lo mismo sucedió con las siguientes llamadas también.
SSCAN nombres de usuario 6 recuento 3Esto es muy útil cuando se trata de grandes conjuntos.
Conclusión
Redis incluye varios tipos de colección, como conjuntos, hashes y conjuntos ordenados. Por lo general, los iteradores se pueden usar para recorrer los tipos de recolección. El iterador de escaneo se usa para iterar las teclas en una base de datos Redis. Es un iterador basado en el cursor que devuelve dos valores por llamada, donde el primero es el cursor actualizado y el segundo es la variedad de elementos. El comando sscan tiene los mismos comportamientos que el comando de escaneo, pero es específico para establecer tipos. Puede escanear a través de un conjunto basado en un patrón también. Además, el comando es capaz de limitar el número de elementos devueltos por llamada.