Documentación/Redis
Redis
Base de datos clave-valor en memoria.
De un vistazo
- Categoría — Clave-valor
- Lenguaje de query — Comandos Redis
- Puerto por defecto — 6379
- Esquema de URI —
redis
Driver de clave-valor Redis para DBFlux, construido sobre el crate
redis.
Funcionalidades
- Driver clave-valor clasificado como
DatabaseCategory::KeyValuecon el lenguaje de queryRedisCommands; el editor usa sintaxis de comandos Redis, no SQL. - Modos de conexión: manual (host/port/user/password/database) y modo URI. El
modo URI acepta cadenas de conexión
redis://yrediss://. - Múltiples databases lógicas mediante
SELECT <db>(MULTIPLE_DATABASES). El índice de la database activa se rastrea en la conexión. - Autenticación con username + password opcionales (
AUTHENTICATION). - Reporta su identidad de cliente al servidor vía
CLIENT SETNAMEal conectar (dbflux/<version>, visible enCLIENT LIST); best-effort, ya que algunos proveedores managed restringen los comandosCLIENT. - TLS/SSL con tres modos (
off,on,verify):off— conexiónredis://plana.on—rediss://con el certificado confiado sin validación de cadena (marcador inseguro).verify—rediss://con un certificado raíz suministrado y certificado/clave de cliente opcionales, construido a través deClient::build_with_tls.
- Soporte de túnel SSH para llegar a Redis a través de un bastion host (solo en modo manual; ver Limitaciones).
- La topología de despliegue puede detectarse automáticamente o configurarse
explícitamente (
standalone,cluster,sentinel):- La detección automática sondea
ROLEeINFO clusteral conectar y enruta hacia el manejo de standalone o de Cluster. clusteromite la detección y conecta directamente víaClusterClient, usando el host/port primario más cualquier nodo semilla adicional configurado. Una conexión Cluster solo expone jamás la database 0; una database distinta de cero en un perfil Cluster se rechaza al conectar en lugar de aplicarse silenciosamente contra la db 0.sentinelconecta a través deSentinelClient, resolviendo el master nombrado desde uno o más nodos Sentinel (host/port primario más cualquier nodo adicional configurado). Tras resolver, el driver ejecutaCLIENT SETNAME,PINGy una comprobación de sanidadROLEde que el nodo resuelto es efectivamente un master.- Recuperación ante failover de Sentinel: un fallo de clase conexión (conexión caída, error de IO) en una conexión respaldada por Sentinel dispara exactamente una re-resolución vía Sentinel y un reintento del comando fallido antes de propagar el error.
- La detección automática sondea
- Exploración y descubrimiento de claves:
- Escaneo de claves basado en cursor (
KV_SCAN,PaginationStyle::Cursor). En una conexión Cluster, unSCANplano no tiene sentido de nodo único, así que el driver lo reparte entre todos los masters: el presupuesto de página se divide equitativamente entre los masters aún pendientes, el cursor de cada nodo se rastrea de forma independiente, y el cursor agregado viaja como un objeto JSON opaco que mapea"<host>:<port>"a su cursorSCANpendiente. El escaneo completo termina cuando todos los masters reportan cursor 0. - Descubrimiento de tipo por clave (
KV_KEY_TYPES) entre string, hash, list, set, sorted set y stream. - Inspección de TTL (
KV_TTL) y reporte de tamaño de valor (KV_VALUE_SIZE). - Comprobaciones de existencia (
KV_GET/KV_EXISTS), renombrado de claves (KV_RENAME) y obtención masiva de múltiples claves (KV_BULK_GET).
- Escaneo de claves basado en cursor (
- Cobertura de tipos de valor: strings, hashes, lists, sets, sorted sets y
streams, incluyendo lecturas de rango de stream, adición de entradas de stream
y eliminación de entradas de stream (
KV_STREAM_RANGE,KV_STREAM_ADD,KV_STREAM_DELETE). - Límite de vista previa de stream configurable, expuesto como ajuste de conexión.
- Mutaciones: insert, update, delete, operaciones por lotes y eliminación
masiva.
RedisCommandGeneratoremite comandos Redis para set/delete, hash set/delete, list push/set/remove, set add/remove, sorted-set add/remove y stream add/delete, para su uso en vistas previas y copy-as-command. - Exportación de resultados a JSON (
EXPORT_JSON). - Gate de tamaño en lecturas de payload completo: cuando el request trae un
presupuesto de bytes, los valores string/JSON se sondean con
STRLENantes delGETy los valores que lo exceden devuelven un placeholder con el tamaño real en lugar de transferir el payload; los tipos de colección no se ven afectados, y las lecturas de stream que alcanzan el tope de fetch se reportan como truncadas.
La introspección de schema reporta un único keyspace db0 agregado en una
conexión Cluster: el conteo de claves y el TTL promedio se suman/promedian a
partir del DBSIZE/estadísticas de keyspace de cada master, en lugar de
reportarse por nodo.
Instance Metrics
Expone un conjunto seleccionado de métricas de servidor en vivo tomadas de la
salida del comando INFO. No disponible en una conexión Cluster — no hay un
único nodo contra el cual muestrear INFO, así que instance_catalog()
devuelve None y el Instance Overview, las métricas y los inspectores no
están disponibles para perfiles Cluster:
redis.connected_clients— clientes actualmente conectadosredis.blocked_clients— clientes esperando en un comando bloqueanteredis.used_memory— bytes asignados por el allocator de Redisredis.used_memory_rss— bytes asignados por el sistema operativo (resident set size)redis.total_commands_processed— comandos procesados acumuladosredis.total_connections_received— conexiones aceptadas acumuladasredis.instantaneous_ops_per_sec— comandos procesados por segundo (tasa del lado del servidor)redis.keyspace_hits— aciertos de caché en búsquedas de clavesredis.keyspace_misses— fallos de caché en búsquedas de clavesredis.evicted_keys— claves desalojadas por la políticamaxmemoryredis.expired_keys— claves expiradas por TTLredis.rdb_changes_since_last_save— cambios desde el último snapshot RDBredis.connected_slaves— cantidad de réplicas conectadas
Cada métrica se devuelve como una única fila (timestamp_ms, value) para
graficado en vivo.
Instance Inspector
Expone snapshots tabulares del estado del servidor en ejecución:
redis.client_list— clientes activos desdeCLIENT LIST(id, cmd, age, idle, flags, db, sub, multi)
Los campos sensibles (addr, laddr, name) se redactan a [redacted] para
evitar exponer direcciones IP y hostnames de clientes.
Limitaciones
-
SQL no está soportado; las queries deben escribirse como comandos Redis.
-
Las métricas de instancia devuelven un único punto de datos por llamada (snapshot actual de
INFO), no una serie temporal histórica. Los contadores acumulativos (p. ej.redis.total_commands_processed) crecen de forma monótona — interprétalos como deltas entre muestras en lugar de tasas absolutas. -
El inspector
CLIENT LISTredacta los camposaddr,laddrynameen cada fila para evitar exponer direcciones IP y nombres suministrados por el usuario a la UI. -
La cancelación de query no está soportada (
QUERY_CANCELLATIONno está establecida); los comandos de larga duración no se pueden abortar desde la UI. -
Sin upsert (
supports_upsert: false), sinRETURNINGy sin update masivo (supports_bulk_update: false). -
Las capacidades DDL están todas deshabilitadas (sin tables, views, indexes, schemas) — esto es un almacén clave-valor, no relacional.
-
Las transacciones se anuncian a nivel de capacidad (
supports_transactions: true) pero sin niveles de aislamiento, savepoints, transacciones anidadas, read-only ni soporte deferrable. -
Pub/Sub no está expuesto (la capacidad
PUBSUBno está establecida). -
El túnel SSH no está disponible cuando el modo URI está habilitado; la ruta del túnel solo está conectada para el modo de conexión manual. Combinar un túnel SSH con nodos semilla adicionales de Cluster o Sentinel no está soportado: el túnel solo reenvía el host/port primario, así que los nodos adicionales quedan inalcanzables a través de él.
-
Los grupos de consumidores de stream no están modelados; solo se soportan lecturas de rango, adición de entradas y eliminación de entradas.
-
Los nodos semilla adicionales de Sentinel y Cluster siempre se contactan por
redis://plano; la configuración de TLS por nodo para esos nodos extra no está soportada. La propia conexión al master resuelto de Sentinel también es plana (sin TLS) en esta iteración. -
La autenticación de Sentinel solo aplica a la conexión al master resuelto (vía el username/password configurados); los propios nodos Sentinel se contactan sin autenticación.
-
El formulario de configuración de conexión todavía no expone los campos de topología/Sentinel/nodos-semilla-de-Cluster; los campos
topology,sentinel_master_nameyadditional_nodesdeDbConfig::Redisexisten y se respetan al conectar, pero por ahora deben configurarse editando el perfil guardado directamente. La configuración de topología/Sentinel/Cluster de un perfil guardado tampoco se persiste todavía en el almacén de conexiones respaldado por SQLite (ConnectionDriverConfigsRepository), así que solo sobrevive mientras dura elDbConfigen memoria que creó la conexión.