Acerca de las nuevas características de Redis 5.0: estructura de datos de flujo

Reimpreso de: https://blog.csdn.net/enmotech/article/details/81230531

Hacer modificaciones menores

Gracias

 

Resumen

640? Wx_fmt = png

¿Cuáles son las funciones especiales de Redis Stream? ¿Cuáles son las similitudes y diferencias con kafka? ¿Cómo usarlo mejor? El autor de este artículo tiene mucha investigación sobre esto, y después de leerlo, siento que me he beneficiado mucho de él.

 

Resumen del contenido

640? Wx_fmt = png

Redis5.0 fue lanzado recientemente por el autor de repente, agregando muchas características nuevas. La mayor característica nueva de Redis5.0 es la adición de una estructura de datos Stream , que es una nueva cola de mensajes potente y duradera que admite multidifusión . El autor admite que Redis Stream se basa en gran medida en el diseño de Kafka.

La estructura de Redis Stream se muestra en la figura anterior. Tiene una lista vinculada de mensajes , y todos los mensajes unidos se concatenan. Cada mensaje tiene una ID única y el contenido correspondiente. El mensaje es persistente, y después de que Redis se reinicia, el contenido sigue ahí.

Cada secuencia tiene un nombre único, que es la clave Redis, que se crea automáticamentexadd cuando usamos por primera vez las instrucciones para agregar el mensaje .

Cada secuencia puede colgar varios grupos de consumidores , y cada grupo de consumidores tendrá un cursorlast_delivered_id que avanza en la matriz de secuencias, lo que indica qué mensaje ha sido consumido por el grupo de consumidores actual. Cada grupo de consumidores tiene un nombre único en la secuencia. El grupo de consumidores no se creará automáticamente. Debe crearse mediante una instrucción separada. Debe xgroup createespecificar que un determinado ID de mensaje de la secuencia comenzará el consumo. Esta identificación se usa para inicializar last_delivered_idvariables.

El estado de cada grupo de consumidores es independiente y no se ve afectado entre sí. En otras palabras, el mismo mensaje interno de Stream será consumido por cada grupo de consumidores.

El mismo grupo de consumidores (Consumer Group) puede conectar múltiples consumidores (Consumer), estos consumidores están en una relación competitiva, cualquier consumidor que lea el mensaje hará que el cursor last_delivered_idavance . Cada consumidor tiene un nombre único dentro del grupo.

Habrá una variable de estado dentro del consumidor pending_ids, que registra el mensaje actual que ha sido leído por el cliente , pero aún no hay un reconocimiento . Si el cliente no tiene un reconocimiento, la ID del mensaje en esta variable aumentará y una vez que se confirma un mensaje, comenzará a disminuir. La variable pendientes_id se llama oficial de Redis PEL, es decir Pending Entries List, es una estructura de datos muy básica, que se utiliza para garantizar que el cliente consuma el mensaje al menos una vez , y no se perderá en medio de la transmisión de la red.

ID del mensaje

La forma de la ID del mensaje es timestampInMillis-sequence, por ejemplo 1527846880572-5, indica que el mensaje actual 1527846880572se genera en la marca de tiempo del milímetro , y es el quinto mensaje generado dentro del milisegundo. El servidor puede generar automáticamente la ID del mensaje o el propio cliente puede especificarla, pero el formulario debe serlo 整数-整数y la ID del mensaje agregado más adelante debe ser mayor que la ID del mensaje anterior.

Contenido del mensaje

El contenido del mensaje es un par clave-valor El par clave-valor en forma de estructura hash no es nada especial.

Agregar, eliminar y modificar

  1. xadd adjuntar mensaje

  2. xdel elimina el mensaje. La eliminación aquí solo establece el bit de bandera y no afecta la longitud total del mensaje

  3. xrange obtiene la lista de mensajes, filtrará automáticamente los mensajes eliminados

  4. longitud del mensaje xlen

  5. del delete Stream

# *号表示服务器自动生成ID,后面顺序跟着一堆key/value
127.0.0.1:6379> xadd codehole * name laoqian age 30  #  名字叫laoqian,年龄30岁
1527849609889-0  # 生成的消息ID
127.0.0.1:6379> xadd codehole * name xiaoyu age 29
1527849629172-0
127.0.0.1:6379> xadd codehole * name xiaoqian age 1
1527849637634-0
127.0.0.1:6379> xlen codehole
(integer) 3
127.0.0.1:6379> xrange codehole - +  # -表示最小值, +表示最大值
127.0.0.1:6379> xrange codehole - +
1) 1) 1527849609889-0
   2) 1) "name"
      2) "laoqian"
      3) "age"
      4) "30"
2) 1) 1527849629172-0
   2) 1) "name"
      2) "xiaoyu"
      3) "age"
      4) "29"
3) 1) 1527849637634-0
   2) 1) "name"
      2) "xiaoqian"
      3) "age"
      4) "1"
127.0.0.1:6379> xrange codehole 1527849629172-0 +  # 指定最小消息ID的列表
1) 1) 1527849629172-0
   2) 1) "name"
      2) "xiaoyu"
      3) "age"
      4) "29"
2) 1) 1527849637634-0
   2) 1) "name"
      2) "xiaoqian"
      3) "age"
      4) "1"
127.0.0.1:6379> xrange codehole - 1527849629172-0  # 指定最大消息ID的列表
1) 1) 1527849609889-0
   2) 1) "name"
      2) "laoqian"
      3) "age"
      4) "30"
2) 1) 1527849629172-0
   2) 1) "name"
      2) "xiaoyu"
      3) "age"
      4) "29"
127.0.0.1:6379> xdel codehole 1527849609889-0
(integer) 1
127.0.0.1:6379> xlen codehole  # 长度不受影响
(integer) 3
127.0.0.1:6379> xrange codehole - +  # 被删除的消息没了
1) 1) 1527849629172-0
   2) 1) "name"
      2) "xiaoyu"
      3) "age"
      4) "29"
2) 1) 1527849637634-0
   2) 1) "name"
      2) "xiaoqian"
      3) "age"
      4) "1"
127.0.0.1:6379> del codehole  # 删除整个Stream
(integer) 1

 

 

162 artículos originales publicados · ganó 30 · 90,000 vistas +

Supongo que te gusta

Origin blog.csdn.net/ScorpC/article/details/100554581
Recomendado
Clasificación