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.
InstallationLien direct vers Installation
npm install @mastra/redis
UtilisationLien direct vers Utilisation
Utilisation d'une chaîne de connexionLien 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/portLien 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ètresLien direct vers Paramètres
id:
connectionString?:
redis://localhost:6379 ou redis://:password@localhost:6379)host?:
port?:
password?:
db?:
client?:
redis) pour les configurations avancéesVous devez fournir connectionString, host ou client. Ces options sont mutuellement exclusives.
Remarques supplémentairesLien direct vers Remarques supplémentaires
Structure des clésLien 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 SentinelLien 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 ClusterLien 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-jacentLien 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 connexionsLien direct vers Fermeture des connexions
Lors de l'arrêt de votre application, fermez la connexion Redis :
await storage.close()
Exemple d'utilisationLien direct vers Exemple d'utilisation
Ajout de Memory à un AgentLien direct vers Ajout de Memory à un Agent
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'AgentLien direct vers Utilisation de l'Agent
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 MastraLien 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: '...' })