LangChain/Memory & Middleware
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.

MethodWhat it does
messagesProperty — 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.