Intermediate7 min
Memory Storage Backends
BaseChatMessageHistory is the interface every storage backend implements. Swap from in-memory to Redis or SQL with a one-line change in your factory function.
Quick Reference
- →All backends implement BaseChatMessageHistory: add_messages(), messages, clear()
- →InMemoryChatMessageHistory — development only, lost on restart
- →RedisChatMessageHistory — production, fast, supports TTL per session
- →SQLChatMessageHistory — production, relational, auditable conversation logs
- →Swap backends without changing your chain — only the factory function changes
BaseChatMessageHistory
Every storage backend in LangChain implements the same interface: BaseChatMessageHistory. This is what makes swapping backends a one-line change. Your chain and RunnableWithMessageHistory never know which backend is running underneath.
| Method | What it does |
|---|---|
| messages | Property — returns the full list of stored messages |
| add_messages(messages) | Adds a batch of messages (prefer over add_user_message/add_ai_message) |
| clear() | Deletes all messages for this session |
| aget_messages() | Async version of messages |
| aadd_messages(messages) | Async version of add_messages |
| aclear() | Async version of clear |
Use add_messages() not add_user_message()
add_messages() sends a batch in one operation — more efficient for backends that make a network call per write (Redis, SQL). add_user_message() and add_ai_message() are convenience methods that call add_messages() with a single item each time.