Aller au contenu principal

Stockage Redis

L'implémentation du stockage Redis fournit une solution de stockage hautes performances utilisant des connexions Redis directes au moyen de node-redis (le client Redis officiel pour Node.js). Elle prend en charge Redis autonome ainsi que, grâce à une configuration personnalisée du client, les déploiements Redis Sentinel et Cluster.

Installation
Lien direct vers Installation

npm install @mastra/redis

Utilisation
Lien direct vers Utilisation

Utilisation d'une chaîne de connexion
Lien direct vers Utilisation d'une chaîne de connexion

import { RedisStore } from '@mastra/redis'

const storage = new RedisStore({
id: 'redis-storage',
connectionString: 'redis://localhost:6379',
})

await storage.init()

Utilisation d'une configuration hôte/port
Lien direct vers Utilisation d'une configuration hôte/port

import { RedisStore } from '@mastra/redis'

const storage = new RedisStore({
id: 'redis-storage',
host: 'localhost',
port: 6379,
password: 'your-password',
db: 0,
})

await storage.init()

Utilisation d'un client préconfiguré
Lien direct vers Utilisation d'un client préconfiguré

Pour les configurations avancées telles que Sentinel ou Cluster, vous pouvez transmettre un client Redis préconfiguré :

import { RedisStore } from '@mastra/redis'
import { createClient } from 'redis'

const client = createClient({
url: 'redis://localhost:6379',
socket: {
reconnectStrategy: retries => Math.min(retries * 50, 2000),
},
})

// Connect the client before passing to RedisStore
await client.connect()

const storage = new RedisStore({
id: 'redis-storage',
client,
})

Paramètres
Lien direct vers Paramètres

id:

string
Identifiant unique de l'instance de Storage

connectionString?:

string
URL de connexion Redis (par exemple, redis://localhost:6379 ou redis://:password@localhost:6379)

host?:

string
Adresse de l'hôte Redis

port?:

number
= 6379
Numéro de port Redis

password?:

string
Mot de passe Redis pour l'authentification

db?:

number
= 0
Numéro de la base de données Redis

client?:

RedisClient
Client Redis préconfiguré (provenant du package redis) pour les configurations avancées
remarque

Vous devez fournir connectionString, host ou client. Ces options sont mutuellement exclusives.

Remarques supplémentaires
Lien direct vers Remarques supplémentaires

Structure des clés
Lien direct vers Structure des clés

L'implémentation du stockage Redis utilise les modèles de clés suivants :

  • Fils de discussion : mastra_threads:id:{threadId}
  • Messages : mastra_messages:threadId:{threadId}:id:{messageId}
  • Index des messages : msg-idx:{messageId} (pour des recherches rapides)
  • Ensemble trié des messages du fil : thread:{threadId}:messages
  • Snapshots de Workflow : mastra_workflow_snapshot:namespace:{ns}:workflow_name:{name}:run_id:{id}
  • Scores : mastra_scorers:id:{scoreId}
  • Ressources : mastra_resources:{resourceId}

Redis Sentinel
Lien direct vers Redis Sentinel

Pour les déploiements à haute disponibilité utilisant Redis Sentinel, créez un client personnalisé :

import { RedisStore } from '@mastra/redis'
import { createClient } from 'redis'

const client = createClient({
url: 'redis://sentinel-host:26379',
// Configure sentinel options as needed for your setup
})

await client.connect()

const storage = new RedisStore({
id: 'redis-sentinel-storage',
client,
})

Redis Cluster
Lien direct vers Redis Cluster

Pour les déploiements Redis Cluster, utilisez le client de cluster :

import { RedisStore } from '@mastra/redis'
import { createCluster } from 'redis'

const cluster = createCluster({
rootNodes: [
{ url: 'redis://node-1:6379' },
{ url: 'redis://node-2:6379' },
{ url: 'redis://node-3:6379' },
],
})

await cluster.connect()

const storage = new RedisStore({
id: 'redis-cluster-storage',
client: cluster,
})

Accès au client sous-jacent
Lien direct vers Accès au client sous-jacent

Vous pouvez accéder au client Redis sous-jacent pour effectuer des opérations personnalisées :

const storage = new RedisStore({
id: 'redis-storage',
connectionString: 'redis://localhost:6379',
})

await storage.init()

const client = storage.getClient()

// Custom Redis operations
await client.set('custom-key', 'value')
const value = await client.get('custom-key')

Fermeture des connexions
Lien direct vers Fermeture des connexions

Lors de l'arrêt de votre application, fermez la connexion Redis :

await storage.close()

Exemple d'utilisation
Lien direct vers Exemple d'utilisation

Ajout de Memory à un Agent
Lien direct vers Ajout de Memory à un Agent

src/mastra/agents/redis-agent.ts
import { Memory } from '@mastra/memory'
import { Agent } from '@mastra/core/agent'
import { RedisStore } from '@mastra/redis'

export const redisAgent = new Agent({
id: 'redis-agent',
name: 'Redis Agent',
instructions:
'You are an AI agent with the ability to automatically recall memories from previous interactions.',
model: 'openai/gpt-5.6-sol',
memory: new Memory({
storage: new RedisStore({
id: 'redis-agent-storage',
connectionString: process.env.REDIS_URL!,
}),
options: {
lastMessages: 10,
},
}),
})

Utilisation de l'Agent
Lien direct vers Utilisation de l'Agent

src/test-redis-agent.ts
import 'dotenv/config'

import { mastra } from './mastra'

const threadId = '123'
const resourceId = 'user-456'

const agent = mastra.getAgent('redisAgent')

const message = await agent.stream('My name is Mastra', {
memory: {
thread: threadId,
resource: resourceId,
},
})

await message.textStream.pipeTo(new WritableStream())

const stream = await agent.stream("What's my name?", {
memory: {
thread: threadId,
resource: resourceId,
},
memoryOptions: {
lastMessages: 5,
},
})

for await (const chunk of stream.textStream) {
process.stdout.write(chunk)
}

Utilisation avec une instance de Mastra
Lien direct vers Utilisation avec une instance de Mastra

import { Mastra } from '@mastra/core'
import { RedisStore } from '@mastra/redis'

const storage = new RedisStore({
id: 'mastra-storage',
host: 'localhost',
port: 6379,
})

const mastra = new Mastra({
storage, // init() called automatically
})

Si vous utilisez directement le Storage sans Mastra, appelez explicitement init() :

import { RedisStore } from '@mastra/redis'

const storage = new RedisStore({
id: 'redis-storage',
host: 'localhost',
port: 6379,
})

await storage.init()

// Access domain-specific stores via getStore()
const memoryStore = await storage.getStore('memory')
const thread = await memoryStore?.getThreadById({ threadId: '...' })