Directorio de artículos
- 1. Información general
- 2. Casos de uso básicos
-
- 2.1 Instalar y ejecutar
- 2.2 Comandos comunes
- 3. Cliente Redis Java
1. Información general
Resumen de notas:
- NoSQL: base de datos no relacional, la base de datos NoSQL proporciona un modelo de consulta y almacenamiento de datos diferente.
- Características de Redis:
- Tipo clave-valor, el valor admite una variedad de estructuras de datos diferentes y tiene funciones ricas
- Hilo único , cada comando es atómico ( la parte de red en Redis6.0 es multiproceso )
- Baja latencia, rápido ( basado en memoria , multiplexación IO, buena codificación).
- Admite persistencia de datos
- Admite clúster maestro-esclavo y clúster de fragmentos
- Admite clientes en varios idiomas
- Nuevas características de Redis:
- Funciones de Redis
- Cliente-desalojo
- ACL v2
- AOF de varias partes
- ……
1.1NoSQL
NoSQL (Not Only SQL) es una clasificación amplia de bases de datos que representa un grupo de sistemas de gestión de bases de datos no relacionales. En comparación con las bases de datos relacionales tradicionales (como las bases de datos SQL), las bases de datos NoSQL proporcionan un modelo de consulta y almacenamiento de datos diferente.
ilustrar:
- Las bases de datos relacionales almacenan datos estructurados y pueden agregar restricciones y otras condiciones a cada tupla o campo.
- Las bases de datos no relacionales almacenan datos no estructurados, generalmente en forma de pares clave-valor. Los datos almacenados son diversos y pueden ser documentos o fotografías.
ilustrar:
- Los datos almacenados en una base de datos relacional se pueden relacionar a través de una tercera tabla.
- Los datos almacenados en bases de datos no relacionales no están relacionados entre sí.
ilustrar:
- Los datos almacenados en la base de datos relacional se pueden agregar, eliminar, modificar y verificar mediante declaraciones SQL.
- Cada uno de los datos almacenados en bases de datos no relacionales tiene su propia forma de almacenar datos y las reglas de almacenamiento son diferentes.
ilustrar:
- Las bases de datos relacionales admiten las características ACID de las transacciones, incluidas la atomicidad, la coherencia, el aislamiento y la durabilidad.
- El almacenamiento de bases de datos no relacionales no tiene transacciones
En general, la diferencia entre SQL y NoSQL se puede resumir en una tabla:
1.2 Significado
Redis nació en 2009. Su nombre completo es RemoteDictionaryServer , un servidor de diccionario remoto, que es un dato NoSQL de valor clave basado en memoria.
característica:
- Tipo clave-valor, el valor admite una variedad de estructuras de datos diferentes y tiene funciones ricas
- Hilo único , cada comando es atómico (la parte de red en Redis6.0 es multiproceso)
- Baja latencia, rápido (basado en memoria, multiplexación IO, buena codificación).
- Admite persistencia de datos
- Admite clústeres maestro-esclavo y clústeres fragmentados
- Admite clientes en varios idiomas
1.3Nuevas funciones de Redis
Funciones de Redis
ilustrar:
Funciones de Redis, una nueva forma de extender Redis a través de scripts del lado del servidor, donde las funciones se almacenan junto con los propios datos. En resumen, redis va a arrebatarle el trabajo a los scripts de Lua.
Cliente-desalojo
ilustrar:
La cantidad de personas conectadas a Redis y el rendimiento se vuelven configurables
AOF de varias partes
ilustrar:
La lectura y escritura asincrónicas ya no son un problema
ACL v2
ilustrar:
Gestión de permisos refinada, puede configurar contraseñas para el clúster, etc.
paquete de lista
ilustrar:
listpack es una nueva estructura de datos utilizada para reemplazar ziplist. No hay configuración de ziplist en la versión 7.0 (solo algunos tipos de datos se utilizan como etapa de transición en la versión 6.0)
2. Casos de uso básicos
Resumen de notas:
Instalar y ejecutar
En ventanas…
En contenedor Docker
sudo docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /home/redis/myredis/myredis.conf:/etc/redis/redis.conf -v /home/redis/myredis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass qweasdzxc
Usando la interfaz gráfica...
Comandos comunes
- Tipo de cadena:
- 添加:SET、GET、MSET(conjunto múltiple)、MGET
- Ejemplos: INCR (aumentar), INCRBY (aumentar por), INCRBYFLOAT (aumentar por flotador), SETNX (establecer si no existe), SETEX (establecer si expira)
- Tipo de hash:
- Adición: HSET, HGET, HMSET (conjunto de múltiples hash)
- Ejemplo: HINCRBY (aumento de hash), HSETNX (conjunto de hash si no existe)
- Consulta: HMGET (obtención múltiple de hash), HGETALL, HKEYS, HVALS
- Tipo de lista:
- Añadido: LPUSH, RPUSH
- Eliminar: LPOP, RPOP, BLPOP y BRPOP: similar a LPOP y RPOP, excepto que espera el tiempo especificado cuando no hay elementos, en lugar de devolver nil directamente
- Consulta: LARGO
- Tipo de configuración:
- Adición: SADD (adición de conjuntos)
- Eliminar: SREM (establecer eliminar miembro)
- Ejemplo: SINTER (establecer intersección), SUNION (establecer unión), SDIFF (establecer diferente)
- 查询:SCARD (establecer cardinalidad), SISMEMBER (el conjunto es miembro), SMEMBERS (establecer miembros)
- Tipo SortedSet, tipo BitMap, tipo HyperLogLog, tipo Stream, tipo GEO: consulte para obtener más detalles
2.1 Instalar y ejecutar
2.1.1 En el sistema Windows
Paso 1: descomprimir
ilustrar:
Después de la instalación, se generarán los siguientes archivos
Ejemplo de inicio:
Paso 2: inicie el servidor
redis-server.exe redis.windows.conf
ilustrar:
- Al iniciar el servidor, debe especificar el archivo de configuración de Redis
- Si no se agrega ningún elemento de configuración, se informará un error.
Aviso:
Necesita agregar elementos de configuración de configuración
Paso 3: iniciar el cliente
1. Inicie el cliente
ilustrar:
Si se inicia el servidor Redis, pero el mensaje Ejecutando en modo independiente no aparece, debe abrir el cliente para apagarlo.
# 通过cmd打开客户端 redis-cli.exe # 关闭客户端 shutdown
Ahora reinicie el servidor.
2. Reinicie el servidor
redis-server.exe redis.windows.conf
ilustrar:
- Exitoso después de reiniciar
2.1.2 En contenedor Docker
Paso 1: extraiga la imagen de Docker
sudo docker pull redis
Paso 2: inicie el servidor
sudo docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /home/redis/myredis/redis.conf:/etc/redis/redis.conf -v /home/redis/myredis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass qweasdzxc
Descripción: Explicación de parámetros
sudo docker run
: Comando para ejecutar el contenedor Docker.--restart=always
: configura el contenedor para que se reinicie automáticamente al salir.--log-opt max-size=100m
: establezca el tamaño máximo de los archivos de registro del contenedor en 100 MB.--log-opt max-file=2
: establezca el número máximo de archivos de registro retenidos por el contenedor en 2.-p 6379:6379
: Asigne el puerto de servicio Redis del contenedor al puerto 6379 del host.--name myredis
: Especifique el nombre del contenedor como "myredis".-v /home/redis/myredis/redis.conf:/etc/redis/redis.conf
: monte el archivo de configuración de Redis en el host en/etc/redis/redis.conf
la ruta del contenedor.-v /home/redis/myredis/data:/data
: monte el directorio de datos en el host en/data
la ruta del contenedor para datos persistentes de Redis.-d redis
: Especifique la imagen del contenedor que se ejecutará como "redis", que es la imagen proporcionada oficialmente por Redis.redis-server /etc/redis/redis.conf
: Especifique el servicio Redis que se ejecutará cuando se inicie el contenedor y pase la ruta del archivo de configuración de Redis.--appendonly yes
: Active el modo de persistencia AOF (Agregar solo archivo) de Redis y agregue la operación de escritura al archivo en el disco.--requirepass qweasdzxc
: Establezca la contraseña del servidor Redis en "qweasdzxc", es decir, se requiere una contraseña para acceder al servicio Redis.
Aviso:
Si necesita habilitar el servicio de acceso remoto de Redis, debe establecer una contraseña para Redis.
Paso 3: iniciar el cliente
redis-cli [options] [commonds]
redis-cli -h 127.0.0.1 -p 6739 -a qweasdzxc
Descripción: Explicación de parámetros
-h 127.0.0.1
: Especifique la dirección IP del nodo redis que se conectará, el valor predeterminado es 127.0.0.1-p 6379
: Especifique el puerto del nodo redis que se conectará, el valor predeterminado es 6379-a 123321
: Especifique la contraseña de acceso para redis
Reponer:
ping
: Realice una prueba de latidos con el servidor Redis y el servidor volverá normalmente.pong
2.1.3 Ejecutar el cliente de interfaz gráfica
Paso 1: Descarga el cliente
URL; lework/RedisDesktopManager-Windows: versión de RedisDesktopManager para Windows (github.com)
Descripción: resultado
Paso 2: instalar
ilustrar:
La instalación falló, necesita instalar la biblioteca de tiempo de ejecución para ejecutar Visual C++
Paso 3: ejecutar
2.2 Comandos comunes
2.2.1 Descripción general
Redis es una base de datos clave-valor, la clave generalmente es de tipo String, pero el tipo de valor es variado:
ilustrar:
Hay muchos tipos de datos en redis, ahora presentaremos los comandos de cada tipo por turno.
Para facilitar nuestro aprendizaje, Redis también agrupa comandos para operar diferentes tipos de datos. Puede ver diferentes comandos en el sitio web oficial ( https://redis.io/commands ):
2.2.2 Comandos comunes
Las instrucciones generales son instrucciones que se pueden utilizar para algunos tipos de datos. Las más comunes incluyen:
- LLAVES: Ver todas las claves que coinciden con la plantilla. No se recomienda su uso en equipos de entorno de producción.
- DEL: eliminar una clave especificada
- EXISTE: determina si la clave existe
- EXPIRAR: Establezca el período de validez de una clave. La clave se eliminará automáticamente cuando expire el período de validez.
- TTL: Verifique el período de validez restante de una LLAVE
ilustrar:
No se
keys
recomienda su uso en equipos del entorno de producción porque Redis es de un solo subproceso. Si se encuentran muchos valores clave, provocará el bloqueo del subproceso.
Reponer:
- Puede verificar el uso específico de un comando a través de ayuda [comando], por ejemplo:
2.2.3Tipo de cadena
2.2.3.1 Descripción general
El tipo de cadena, es decir, el tipo de cadena, es el tipo de almacenamiento más simple en Redis.
Su valor es una cadena, pero según el formato de la cadena, se puede dividir en tres categorías:
- cadena: cadena ordinaria
- int: tipo entero, puede realizar operaciones de incremento y decremento automático
- float: tipo de punto flotante, puede realizar operaciones de incremento y decremento automático
No importa qué formato sea, la capa inferior se almacena en forma de matriz de bytes, pero el método de codificación es diferente. El espacio máximo de tipo string no puede exceder los 512m.
ilustrar:
En el tipo Cadena, la capa inferior de Redis se puede dividir en tres tipos para el almacenamiento, a saber, las cadenas se convertirán en bytes para el almacenamiento, los números y los números de punto flotante se convertirán en binarios para el almacenamiento.
2.2.3.2 Comandos comunes
1.Nuevo
- SET: agregar o modificar un par clave-valor de tipo cadena existente
- OBTENER: obtiene el valor del tipo de cadena según la clave
- MSET (conjunto múltiple): agregue múltiples pares clave-valor de tipo cadena en lotes
- MGET (obtención múltiple): obtiene múltiples valores de tipo cadena basados en múltiples claves
ilustrar:
- El comando anterior se configuró correctamente
2. Autocrecimiento
- INCR (aumentar): deja que una clave entera aumente en 1
- INCRBY (aumentar en): Deje que una clave entera aumente por sí sola y especifique el tamaño del paso. Por ejemplo: incrby num 2 hace que el valor numérico aumente en 2.
- INCRBYFLOAT (aumento por flotador): deja que un número de tipo de punto flotante aumente por sí solo y especifica el tamaño del paso
ilustrar:
- Cuando se utiliza el incremento automático, el número aumentará según sea necesario
3.Comandos combinados
- SETNX (establecer si no existe): agregue un par clave-valor de tipo Cadena, siempre que la clave no exista; de lo contrario, no se ejecutará.
- SETEX (establecer si expira): agregue un par clave-valor de tipo cadena y especifique el período de validez
ilustrar:
- Si la clave ya existe en Redis, la configuración falla.
2.2.3.3 Estructura clave
La clave de Redis permite que varias palabras formen una estructura jerárquica, separadas por ':', en el siguiente formato:
项目名:业务名:类型:id
ilustrar:
Este formato no es fijo, también puedes eliminar o agregar entradas según tus propias necesidades.
Por ejemplo, nuestro nombre de proyecto es heima, y hay dos tipos de datos diferentes, usuario y producto, la clave la podemos definir así:
user相关的key:heima:user:1 product相关的key:heima:product:1
Si Valor es un objeto Java, como un objeto Usuario, puede serializar el objeto en una cadena JSON y almacenarlo:
LLAVE | VALOR |
---|---|
hogar:usuario:1 | ' {“id”:1, “nombre”: “Jack”, “edad”: 21} ' |
inicio:producto:1 | ' {"id":1, "nombre": "Xiaomi 11", "precio": 4999} ' |
ilustrar:
- Después de utilizar el
:
método de agrupación de Redis, podrá ver las herramientas de visualización y crear grupos para nosotros.
2.2.4 Tipo de hash
2.2.4.1 Descripción general
Tipo hash, también llamado hash, su valor es un diccionario desordenado, similar a la estructura HashMap en Java. La estructura String consiste en serializar el objeto en una cadena JSON y almacenarlo, lo que resulta muy inconveniente cuando es necesario modificar un determinado campo del objeto:
La estructura Hash puede almacenar cada campo en el objeto de forma independiente y CRUD se puede realizar en un solo campo:
2.2.4.2 Comandos comunes
1.Nuevo
- Valor del campo de clave HSET: agregue o modifique el valor del campo de la clave de tipo hash
- Campo de clave HGET: obtiene el valor del campo de una clave de tipo hash
- HMSET (conjunto múltiple de hash): agregue valores de campo de múltiples claves de tipo hash en lotes
ilustrar:
HMSET
se eliminará porque el efecto esHSET
similar a
2. Autocrecimiento
- HINCRBY (aumento de hash): permite que el valor del campo de una clave de tipo hash se incremente automáticamente y especifica el tamaño del paso
ilustrar:
- Puedes ver el valor de edad y el crecimiento aquí.
3.Comandos combinados
- HSETNX (conjunto de hash si no existe): agregue un valor de campo clave de tipo hash, siempre que el campo no exista; de lo contrario, no se ejecutará
ilustrar:
- La clave con el valor clave aquí
ljtxy:product"1
ya tiene el campo de edad, por lo que la configuración falla.
4.Consulta
- HMGET (obtención de hash múltiple): obtiene los valores de campo de múltiples claves de tipo hash en lotes
- HGETALL: obtiene todos los campos y valores en una clave de tipo hash
- HKEYS: obtiene todos los campos en una clave de tipo hash
- HVALS: obtiene todos los valores en una clave de tipo hash
2.2.5Tipo de lista
2.2.5.1 Descripción general
El tipo Lista en Redis es similar a LinkedList en Java y puede considerarse como una estructura de lista doblemente vinculada. Admite tanto búsqueda directa como inversa .
Las características también son similares a LinkedList:
- ordenado
- Los elementos se pueden repetir.
- Inserción y eliminación rápidas
- La velocidad de consulta es promedio
Comúnmente utilizado para almacenar datos ordenados, como: círculo de amigos como lista, lista de comentarios, etc.
2.2.5.2 Comandos comunes
1.Nuevo
- Elemento clave LPUSH…: Inserta uno o más elementos a la izquierda de la lista
- Elemento clave RPUSH…: Inserta uno o más elementos en el lado derecho de la lista
Descripción: resultado
2.Eliminar
-
Clave LPOP: elimina y devuelve el primer elemento en el lado izquierdo de la lista, o devuelve nil si no hay ninguno
-
Clave RPOP: elimina y devuelve el primer elemento en el lado derecho de la lista
-
BLPOP y BRPOP: similares a LPOP y RPOP, excepto que esperan el tiempo especificado cuando no hay elementos en lugar de devolver nil directamente.
ilustrar:
- Similar a esperar el tiempo de retraso especificado, si se agota el tiempo, devuelve cero
3. Consulta
- LRANGE extremo de estrella clave: devuelve todos los elementos dentro de un rango de estrellas clave
Descripción: resultado
2.2.6 Tipo de configuración
2.2.6.1 Descripción general
La estructura Set de Redis es similar al HashSet en Java, que puede considerarse como un HashMap cuyo valor es nulo. Debido a que también es una tabla hash , tiene características similares a HashSet :
- trastorno
- Los elementos no se pueden repetir
- Encuentra rápido
- Admite intersección, unión, diferencia y otras funciones.
2.2.6.2 Comandos comunes
1.Nuevo
- Miembro clave SADD (adición de conjunto): agrega uno o más elementos al conjunto
2.Eliminar
- Miembro clave SREM (conjunto de eliminación de miembros)...: Elimina el elemento especificado en el conjunto.
3. Cruz y diferencia
- SINTER (establecer intersección) clave1 clave2 ...: Encuentra la intersección de clave1 y clave2
- SUNION (establecer unión) clave1 clave2...: Encuentra la unión de clave1 y clave2
- SDIFF (establecer diferente) clave1 clave2 ...: Encuentra la diferencia establecida entre clave1 y clave2
ilustrar:
4.Consulta
- Tecla SCARD (establecer cardinalidad): devuelve el número de elementos del conjunto
- Miembro clave SISMEMBER (el conjunto es miembro): determina si un elemento existe en el conjunto
- SMEMBERS (miembros del conjunto): obtiene todos los elementos del conjunto
2.2.7Tipo de conjunto ordenado
2.2.7.1 Descripción general
SortedSet de Redis es una colección de conjuntos ordenables, que es algo similar a TreeSet en Java, pero la estructura de datos subyacente es muy diferente. Cada elemento en SortedSet tiene un atributo de puntuación, y los elementos se pueden ordenar según el atributo de puntuación. La implementación subyacente es una lista de omisión (SkipList) más una tabla hash.
SortedSet tiene las siguientes propiedades:
- Ordenable
- Los elementos no se repiten.
- La velocidad de consulta es rápida
Debido a la naturaleza ordenable de SortedSet, a menudo se usa para implementar funciones como tablas de clasificación.
2.2.7.2 Comandos comunes
1.Nuevo
- Miembro de puntuación clave de ZADD [miembro de puntuación]: agregue uno o más elementos al conjunto ordenado y actualice su valor de puntuación si ya existe
ilustrar:
- nuevo valor
2.Eliminar
- Miembro clave de ZREM: eliminar un elemento específico en el conjunto ordenado
ilustrar:
- Eliminar valor
3. Cruz y diferencia
- ZDIFF, ZINTER, ZUNION: encontrando diferencias, intersecciones y uniones
3. Consulta
- Miembro clave ZSCORE: obtiene el valor de puntuación del elemento especificado en el conjunto ordenado
- Miembro clave ZRANK: obtiene la clasificación del elemento especificado en el conjunto ordenado
- Tecla ZCARD: obtiene el número de elementos en el conjunto ordenado
- Tecla ZCOUNT min max: cuenta el número de todos los elementos cuyo valor de puntuación está dentro de un rango determinado
- Miembro de incremento de clave ZINCRBY: permite que el elemento especificado en el conjunto ordenado aumente en el valor de incremento especificado.
- Clave ZRANGE min max: después de ordenar por puntuación, obtenga los elementos dentro del rango de clasificación especificado
ilustrar:
- rango significa devolver el elemento correspondiente
- Clave ZRANGEBYSCORE min max: después de ordenar por puntuación, obtenga los elementos dentro del rango de puntuación especificado
ilustrar;
- rangbyscore obtiene los elementos ordenados en el rango especificado
2.2.7.3 Escenarios de aplicación
2.2.8Tipo de mapa de bits
2.2.8.1 Descripción general
Un tipo de datos de estado binario estadístico implementado con el tipo String como estructura de datos subyacente. Un mapa de bits es esencialmente una matriz, que es una operación bit a bit basada en el tipo de datos String. La matriz consta de bits, cada uno de los cuales corresponde a un desplazamiento (lo llamamos índice). El número máximo de bits admitidos por Bitmap es 2 32 bits, lo que puede ahorrar mucho espacio de almacenamiento. Puede almacenar hasta 4,29 mil millones de bytes de información utilizando una memoria de 512 M (2 32 = 4294967296)
2.2.8.2 Comandos comunes
1.Nuevo
- Valor de desplazamiento de la clave setbit: agrega un elemento al valor de la posición especificada
ilustrar:
- nuevo valor
2. Consulta
Obtener el valor del elemento especificado
- desplazamiento de clave getbit: obtiene el valor de la posición especificada del elemento especificado
ilustrar:
- Valor de consulta
Obtenga los bytes de almacenamiento del elemento especificado
- clave strlen: obtiene el número de bytes almacenados en el elemento especificado
ilustrar:
- Consultar espacio ocupado
- Clave de recuento de bits: obtiene el número de unos en el elemento especificado
ilustrar:
- Consulta el numero de 1
Obtenga el almacenamiento de bits de varios elementos especificados :
- Tecla de destino de operación BITOP [clave…]: obtiene elementos en varios bits
ilustrar:
Reponer:
BITOP AND destkey srckey1 srckey2 srckey3 ... srckeyN
, realice una unión lógica en una o más claves y guarde el resultado en destkey.BITOP OR destkey srckey1 srckey2 srckey3 ... srckeyN
, realice OR lógico en una o más claves y guarde el resultado en destkey.BITOP XOR destkey srckey1 srckey2 srckey3 ... srckeyN
, realice XOR lógico en una o más claves y guarde el resultado en destkey.BITOP NOT destkey srckey
, encuentra la negación lógica de la clave dada y guarda el resultado en destkey.
2.2.8.3 Escenarios de aplicación
Cuente el número de registros de usuarios
2.2.9Tipo de registro HyperLog
2.2.9.1 Descripción general
Redis HyperLogLog es un algoritmo para estadísticas de cardinalidad . La ventaja de HyperLogLog es que cuando el número o volumen de elementos de entrada es muy, muy grande, el espacio requerido para calcular la cardinalidad siempre es fijo y pequeño.
En Redis, cada clave HyperLogLog solo cuesta 12 KB de memoria para calcular la cardinalidad de casi 2^64 elementos diferentes. Esto contrasta marcadamente con una colección que consume más memoria al calcular la cardinalidad: cuantos más elementos haya, más memoria se consumirá.
2.2.9.2 Comandos comunes
1.Nuevo
- Elemento clave PFADD (Agregación fija probabilística) [elemento...]: agrega el elemento especificado a HyperLogLog
ilustrar:
- Agregar nuevo elemento
2.Modificar
- PFMERGE (Fusión fija probabilística) destkey sourcekey [sourcekey...]: fusiona múltiples HyperLogLogs en un HyperLogLog
ilustrar:
- fusionar base
3. Consulta
- Tecla PFCOUNT [tecla…]: Devuelve la estimación de cardinalidad para el HyperLogLog dado
ilustrar:
- Obtener el número básico después de la deduplicación
2.2.9.3 Escenarios de aplicación
Cuente el UA (número de visitas de usuarios) de sitios web comerciales
2.2.10Tipo de corriente
2.2.10.1 Descripción general
Stream es un nuevo tipo de datos introducido por Redis 5.0, que puede implementar una cola de mensajes muy completa.
2.2.10.2 Comandos comunes
1.Nuevo
- Valor del campo ID de clave XADD [valor del campo...]: use XADD para agregar mensajes a la cola. Si la cola especificada no existe, cree la cola.
ilustrar:
- Ver resultados
- XGROUP [CREAR nombre de grupo clave id-o-$]: Crear grupo de consumidores
ilustrar:
- Cree el grupo de consumidores g1 con la clave s1 y conserve los datos
- XGROUP [CREATECONSUMER clave nombre de grupo nombre de consumidor]: agregue el consumidor especificado en el grupo de consumidores
ilustrar:
- Especifique la clave y el grupo de consumidores y agréguele consumidores
- Grupo de claves XPENDING [[IDLE min-idle-time] recuento inicial y final [consumidor]]: muestra información sobre los mensajes pendientes
ilustrar:
- Devolver todos los mensajes confirmados
2.Eliminar
- XGROUP [DESTROY nombre del grupo de claves]: utilice XGROUP DESTROY para eliminar grupos de consumidores
ilustrar:
- Especificar la clave y el nombre del grupo de consumidores
- XGROUP [DELCONSUMER nombre de grupo de claves nombre de consumidor]: elimina el consumidor especificado en el grupo de consumidores
ilustrar:
- Para ser probado
3. actualizar
- ID del grupo de claves XACK [ID…]: marcar el mensaje como "procesado"
ilustrar:
- Especifique la clave, el nombre del grupo y el ID de la cola que se procesará.
4.Consulta
- XREAD [CONTAR recuento] [BLOQUEAR milisegundos] STREAMS clave [clave…] id [id…]: use XREAD para obtener una lista de mensajes de forma bloqueante o sin bloqueo
ilustrar:
- elemento de consulta
- Bloquear la lectura de las últimas noticias.
- Consumidor del grupo XREADGROUP GROUP [COUNT count] [BLOCK milisegundos] [NOACK] STREAMS key [key...] ID [ID...]: lee mensajes en el grupo de consumidores
ilustrar:
2.2.11 tipo GEO
2.2.11.1 Descripción general
GEO es la abreviatura de Geolocalización, que representa coordenadas geográficas. Redis agregó soporte para GEO en la versión 3.2, lo que nos permite almacenar información de coordenadas geográficas y nos ayuda a recuperar datos basados en longitud y latitud.
2.2.11.2 Comandos comunes
1.Nuevo
- Clave GEOADD [NX | XX] [CH] longitud miembro de latitud: agrega información geoespacial , que incluye: longitud (longitud), latitud (latitud), valor (miembro)
ilustrar:
- Explicación del parámetro:
GEOADD 键 精度 维度 值
- Clave GEOPOS [miembro [miembro…]]: Devuelve las coordenadas del miembro especificado
ilustrar:
- Explicación del parámetro:
GEOPOS 键 成员
2.Modificar
- GEODIST clave miembro1 miembro2 [M | KM | FT | MI]: Calcula la distancia entre los dos puntos especificados y regresa
ilustrar:
- Explicación del parámetro:
GEODIST 键 值1 值2
- Clave GEOSEARCH <miembro FROMMEMBER | FROMLONLAT longitud latitud> <radio BYRADIUS <M | KM | FT | MI> | BYBOX ancho alto <M | KM | FT | MI>> [ASC | DESC] [COUNT count [ANY]] [WITHCOORD ] [WITHDIST] [WITHHASH]: busque miembros dentro del rango especificado, ordénelos por su distancia desde el punto especificado y devuélvalos. El rango puede ser circular o rectangular. 6.2 Nuevas características
ilustrar:
- Explicación del parámetro:
GEODIST 键 指定经纬度 画圆 举例 返回距离
- Clave GEOHASH [miembro [miembro…]]: convierte las coordenadas del miembro especificado en forma de cadena hash y devuelve
ilustrar:
- Explicación del parámetro:
GEOHASH 键 成员
3. Cliente Redis Java
Resumen de notas:
- Descripción general: el sitio web oficial de Redis ofrece clientes en varios idiomas, dirección: https://redis.io/clients
- Uso básico de Jedis: Jedis en sí no es seguro para subprocesos y la creación y destrucción frecuentes de conexiones provocarán pérdidas de rendimiento.
- Grupo de conexiones Jedis: en este momento, se utiliza el grupo de conexiones Jedis en lugar del método de conexión directa Jedis para reducir la creación y destrucción frecuentes de conexiones.
- Uso de SpringDataRedis: SpringData es un módulo para operaciones de datos en Spring, incluida la integración de varias bases de datos
- Serialización de RedisSerializr: el método de serialización personalizado hace que los recursos de almacenamiento de Redis ahorren más memoria
- Uso de StringRedisTemplate: para ahorrar espacio en la memoria, no usamos el serializador JSON para procesar el valor, sino que usamos el serializador String de manera uniforme, lo que requiere que solo se almacenen la clave y el valor del tipo String. Cuando es necesario almacenar objetos Java, la serialización y deserialización de los objetos se realiza manualmente .
3.1 Descripción general
Los clientes en varios idiomas se proporcionan en el sitio web oficial de Redis, dirección: https://redis.io/clients
ilustrar:
Hay muchos usos excelentes del cliente en el cliente Java, se recomienda aprender Jedis y Lettcuce.
Spring integra las operaciones Jedis y lechuga del cliente Java, llamado Spring Data Redis, aprenda Spring Data Redis en este momento
3.2 Casos de uso básicos: uso de Jedis
3.2.1 Descripción general
Dirección del sitio web oficial de Jedis: https://github.com/redis/jedis
3.2.2 Casos de uso básicos
Paso 1: importar dependencias
<!--jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.4.1</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
Paso 2: demostración
public class JedisTest {
public Jedis jedis;
@Before
public void setUp() {
// 1.建立连接
jedis = new Jedis("10.13.164.55", 6379);
// 2.设置密码
jedis.auth("qweasdzxc");
// 3.选择库
jedis.select(0);
}
@Test
public void testSet() {
String set = jedis.set("yueyue2", "玥玥");
System.out.println(set);
String s = jedis.get("yueyue2");
System.out.println(s);
}
@After
public void setDown() {
if (Objects.isNull(jedis)) {
jedis.close();
}
}
}
ilustrar:
Crea objetos Jedis, métodos de prueba y cierra recursos.
3.2.3 Grupo de conexiones Jedis
3.2.3.1 Descripción general
Jedis en sí no es seguro para subprocesos y la creación y destrucción frecuentes de conexiones provocará una pérdida de rendimiento, por lo que le recomendamos que utilice el grupo de conexiones Jedis en lugar del método de conexión directa de Jedis.
3.2.3.2 Casos de uso básicos
Paso 1: crear una fábrica
/**
* 获取Jedis连接池工厂
*/
public class JedisConnectionFactory {
private static final JedisPool jedisPool;
static {
// 配置连接池
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 最大连接
jedisPoolConfig.setMaxTotal(8);
// 最大空闲连接,当有连接时,最多准备8个连接点
jedisPoolConfig.setMaxIdle(8);
// 最小空闲连接,当没有连接时,会释放所有连接点
jedisPoolConfig.setMinIdle(0);
// 设置最长等待时间,ms
jedisPoolConfig.setMaxWait(Duration.ofMillis(200));
// 创建连接此对象
jedisPool = new JedisPool(jedisPoolConfig, "10.13.164.55", 6379, 2000, "qweasdzxc");
}
// 获取Jedis对象
public static Jedis getJedis() {
return jedisPool.getResource();
}
}
Paso 2: demostración
public class JedisTest {
public Jedis jedis;
@Before
public void setUp() {
// 1.建立连接
// jedis = new Jedis("10.13.164.55", 6379);
// 2.设置密码
// jedis.auth("qweasdzxc");
jedis = JedisConnectionFactory.getJedis();
// 3.选择库
jedis.select(0);
}
@Test
public void testSet() {
String set = jedis.set("yueyue2", "玥玥");
System.out.println(set);
String s = jedis.get("yueyue2");
System.out.println(s);
}
@After
public void setDown() {
if (Objects.isNull(jedis)) {
jedis.close();
}
}
}
3.3 Casos de uso básicos: uso de SpringDataRedis
3.3.1 Descripción general
SpringData es un módulo de operación de datos en Spring, que incluye la integración de varias bases de datos, entre las cuales el módulo de integración de Redis se llama SpringDataRedis, dirección del sitio web oficial: https://spring.io/projects/spring-data-redis
- Proporciona integración de diferentes clientes Redis (Lettuce y Jedis)
- Proporciona API unificada de RedisTemplate para operar Redis
- Admite el modelo de publicación-suscripción de Redis
- Soporta Redis Sentinel y Redis Cluster
- Admite programación reactiva basada en Lettuce
- Admite serialización y deserialización de datos basada en JDK, JSON, cadenas y objetos Spring
- Admite la implementación de JDKCollection basada en Redis
3.3.2 Casos de uso básicos
Descripción: operaciones de comando comunes
API Tipo de valor de retorno ilustrar redisTemplate.opsForValue () ValorOperaciones Manipular datos de tipo cadena redisTemplate.opsForHash () Operaciones Hash Manipular datos de tipo Hash redisTemplate.opsForList () Lista de operaciones Manipular datos de tipo lista redisTemplate.opsForSet () Establecer operaciones Manipular datos de tipo conjunto redisTemplate.opsForZSet () OperacionesZSet Operar datos de tipo SortedSet redisPlantilla comandos comunes
Paso 1: importar dependencias
<dependencies>
<!--SpringDataRedis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
ilustrar:
Este experimento opera en SpringBoot, así que importe las dependencias de SpringBoot
Paso 2: agregar configuración
spring:
redis:
host: 10.13.164.55
port: 6379
password: qweasdzxc
lettuce: # redis默认使用lettuce客户端进行连接
pool:
max-active: 8 # 最大连接
min-idle: 0 # 最小空闲
max-idle: 8 # 最大空闲
max-wait: 200 # 连接等待时间
ilustrar:
Configure el archivo de configuración de Redis para facilitar el ensamblaje automático de SpringBoot
Paso 3: demostración
@SpringBootTest
class SpringDataRedisDemoApplicationTests {
@Autowired
RedisTemplate redisTemplate;
@Test
void contextLoads() {
redisTemplate.opsForValue().set("yueyue", "玥玥大美女");
Object o = redisTemplate.opsForValue().get("yueyue");
System.out.println(o.toString());
}
}
ilustrar:
Es necesario utilizar
@Autowired
anotaciones para implementar la inyección de dependencia.
Aviso:
RedisTemplate puede recibir cualquier objeto como valor y escribirlo en Redis, pero serializará el objeto en forma de bytes antes de escribirlo. El valor predeterminado es utilizar la serialización JDK. El resultado es el siguiente
Hacerlo empeorará la legibilidad y consumirá mucha memoria.
Al observar el código fuente, descubrí que la capa subyacente usa el objeto ObjectOutputStream para convertir objetos Java en bytes.
3.3.3 Serialización de RedisSerializr
3.3.3.1 Descripción general
Debido a que el método de serialización de SpringDataRedis adopta la serialización JDK predeterminada y no puede implementar la forma en que almacenamos datos para obtener lo que vemos y obtenemos, aquí usamos la serialización personalizada.
ilustrar:
Hay muchas formas de implementar la serialización personalizada. El método de serialización de SpringDataRedis utiliza
JdkSerializationRedisSerializer
la serialización de forma predeterminada. Aquí se recomiendan dos métodos de serialización, uno es el método de serialización para convertir cadenas en cadenasStringRedisSerializer
y el otro es la conversión entre Json y cadenas.GenericJackson2JsonRedisSerializer
3.3.3.2 Casos de uso básicos
Paso 1: serialización personalizada
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
// 创建Template
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 设置连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 设置序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer =
new GenericJackson2JsonRedisSerializer();
// key和 hashKey采用 string序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// value和 hashValue采用 JSON序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
return redisTemplate;
}
ilustrar:
- En este punto, complete la inyección de dependencia de RedisTemplate y reescriba su propia lógica.
- Fábrica de conexiones, el marco SpringBoot completará automáticamente la inyección por nosotros, por lo que la fábrica de conexiones se utiliza directamente aquí.
Paso 2: demostración
@SpringBootTest
class SpringDataRedisDemoApplicationTests {
@Autowired
RedisTemplate<String, Object> redisTemplate;
@Test
void testString() {
redisTemplate.opsForValue().set("yueyue", "玥玥,大美女");
Object o = redisTemplate.opsForValue().get("yueyue");
System.out.println(o.toString());
}
@Test
void testObject() {
redisTemplate.opsForValue().set("yueyue", new User("玥玥", 17, "大美女"));
Object o = redisTemplate.opsForValue().get("yueyue");
System.out.println(o.toString());
}
}
ilustrar:
- Los resultados del método testString son los siguientes
- Los resultados del método testObject son los siguientes
Aviso:
Cada vez que se almacena el valor de un objeto, para realizar la serialización y deserialización automática, SpringDataRedis agregará una cadena larga de nombres de clase de ruta completos, por lo que ocupará mucho espacio en la memoria.
3.3.4Uso de StringRedisTemplate
3.3.4.1 Descripción general
Para ahorrar espacio en la memoria, no usamos el serializador JSON para procesar el valor, sino que usamos el serializador String de manera uniforme, lo que requiere que solo se almacenen la clave y el valor del tipo String. Cuando es necesario almacenar objetos Java, la serialización y deserialización de los objetos se realiza manualmente .
ilustrar:
Completar manualmente la serialización y deserialización de objetos es problemático, pero puede ahorrar espacio en la memoria.
3.3.4.2 Casos de uso básicos
Paso 1: importar dependencias
<!--SpringDataRedis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.33</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Paso 2: demostración
@SpringBootTest
class SpringDataRedisDemoApplicationTests2 {
@Autowired
StringRedisTemplate stringRedisTemplate;
@Test
void testString() {
stringRedisTemplate.opsForValue().set("yueyue", "玥玥,大美女");
Object o = stringRedisTemplate.opsForValue().get("yueyue");
System.out.println(o.toString());
}
@Test
void testObject() {
User user = new User("玥玥", 17, "大美女");
String jsonString = JSON.toJSONString(user); // 此处使用fastJson工具进行对象的序列化与反序列化
stringRedisTemplate.opsForValue().set("yueyue", jsonString);
String result = stringRedisTemplate.opsForValue().get("yueyue");
User resultUser = JSON.parseObject(result, User.class);
System.out.println(resultUser);
}
}
ilustrar:
Los resultados del método testString son los siguientes
Los resultados del método testObject son los siguientes