Free forever, no credit card.Get Started for Free →
← All posts
November 12, 2026 · 6 min read

Does Redis Streams Remember Between Runs? Entries Stay in the Log Until Trimmed. The Next Run Still Starts With Only Its Entry.

Does Redis Streams Remember Between Runs? Entries Stay in the Log Until Trimmed. The Next Run Still Starts With Only Its Entry. Redis Streams remembers more than most Redis structures do. A stream is an append-only log under a single key. Entries stay after they are read, consumer groups track delivery and acknowledgement, and unacknowledged entries left by a crashed consumer can be handed to a healthy one. That is a real delivery record. It is not a record of the work itself. An entry holds th

Does Redis Streams Remember Between Runs? Entries Stay in the Log Until Trimmed. The Next Run Still Starts With Only Its Entry.

Redis Streams remembers more than most Redis structures do. A stream is an append-only log under a single key. Entries stay after they are read, consumer groups track delivery and acknowledgement, and unacknowledged entries left by a crashed consumer can be handed to a healthy one. That is a real delivery record. It is not a record of the work itself. An entry holds the fields a producer wrote, in the order they were appended. What a run checked, decided, and finished after reading that entry was never written back to the stream, so the next run starts with an entry, and nothing else.

A stream keeps entries, in order, under one key

Producers append entries with XADD. Each entry receives an ID made from a timestamp and a sequence number, so entries sort in the order they arrived. Each entry holds a set of field-value pairs, and once written an entry is never changed. Readers keep their own position in the log, because reading does not remove anything.

Read directly with XREAD and the server keeps no state at all: every reader sees every entry, and each reader tracks where it stopped on its own. Consumer groups add the bookkeeping. A group created with XGROUP CREATE starts from a chosen ID, either the beginning of the stream or only entries that arrive afterwards. Inside the group, XREADGROUP with the special greater-than ID delivers entries that were never delivered to any member of that group before. Each entry goes to one consumer in the group, not to all of them, so the work is split instead of duplicated.

That split is why streams replaced plain lists as a work queue in many setups. Popping a list removes the item and leaves no trace. A group delivery leaves a trace, and that trace makes recovery possible.

The pending list remembers delivery, not completion of the work

When a group delivers an entry, Redis records it in the group's Pending Entries List, the PEL. The pending record holds the entry ID, the name of the consumer it was delivered to, the delivery time, and a delivery count. The entry stays pending until that consumer acknowledges it with XACK. Acknowledgement removes the pending record. The entry itself stays in the stream, because only trimming or an explicit delete removes entries.

The PEL answers three useful questions. XPENDING shows how many entries are still unacknowledged, and which consumers hold them. A restarted consumer can re-read its own pending entries by reading with ID 0 instead of the greater-than ID. An entry pending too long can be moved with XCLAIM, or reassigned automatically with XAUTOCLAIM once it has been idle past a chosen minimum time. Delivery is therefore at-least-once: an entry is handed out again until someone acknowledges it, and handlers must tolerate seeing the same entry twice.

None of that records what the handler concluded. The PEL knows an entry was delivered twice and acknowledged once. It does not know what the run found while processing it, what decision followed, what action was taken outside Redis, or whether that action succeeded. Once the acknowledgement lands, even the delivery trace is gone, and the group remembers only its position in the log.

Retention is a trimming decision, not a record of work

A stream has no built-in expiry. Without trimming, entries stay available for replay indefinitely, and any consumer or group can re-read the log from any earlier ID. That replay is valuable: a new reporting job can be built from history, and an investigation can re-read the exact entries a decision was based on.

Size is controlled by trimming, usually a maximum length on XADD or an XTRIM by length or by minimum ID. Approximate trimming keeps the operation cheap, at the cost of keeping a few entries past the cap. Trimming also ignores the pending list: an entry can be trimmed while still pending, so a recovering consumer can be handed an ID whose payload no longer exists. XAUTOCLAIM surfaces those missing IDs in its deleted list. The log's retention policy and the work's recovery needs are separate concerns, managed separately.

Replay, in any case, returns the starting point, not the ending point. The entry that comes back is the entry that was written, unchanged. It carries no note about which runs handled it, what was checked alongside it, or what was settled because of it.

What a scheduled agent actually needs at the start of a run

Consider a scheduled automation that consumes a stream through n8n, Make, Zapier, or a custom agent. At the start of a new run, the next entry is only one part of what that run needs. It also needs to know which earlier entries were already investigated, so a replay, a restart, or a reclaimed pending entry does not trigger the same action twice. It needs the decisions made on those entries, so a pattern cleared yesterday is not treated as brand new today. It needs the full reasoning behind those decisions, so a genuinely new entry that looks similar can be separated from a settled one. And it needs that record shared, so a second workflow reading the same stream starts from the same past.

Redis Streams supplies the entries, the order, the delivery tracking, and the replay window. The rest is memory, and memory belongs in a layer built to hold it.

That layer is what Vilix AI provides. Vilix AI is cloud-hosted, with zero infrastructure to run: no extra stream, consumer group, or pending list to provision beside the existing setup. The same memory is available everywhere over MCP, so the automation consuming the stream, the agent reviewing the outcome, and every other connected tool read and write one shared memory. Vilix AI stores full conversation history, not just extracted facts, so a later run can revisit what was actually discussed and decided, in context, instead of working from a single replayed entry or a short summary.

The practical split is simple. Let the stream do the job it is built for: appending entries in order, splitting deliveries across a group, tracking acknowledgements, and replaying history inside the retention window. At the end of each run, write the outcome into memory: what arrived, what was checked, what was decided, and what still needs attention. At the start of the next run, read that memory before acting. A redelivered entry then meets an agent that can check the record of work first, recognize finished work, and spend the run only on what is genuinely new.

There is no cost to testing that split. Vilix AI has a free plan that stays free forever, and Pro comes with a 7-day trial that needs no credit card. The memory stays portable throughout: export everything or delete it anytime.

Get Started for Free Free forever, no credit card.

The stream will keep the next entry, in order, for as long as the trimming policy allows. The memory makes sure the next run arrives knowing everything the earlier runs learned.

Get Started for Free

Persistent memory across ChatGPT, Claude, and the AI tools you already use in Vilix AI.

Get Started for Free

Free forever, no credit card.

Keep reading
Does Google Cloud Tasks Remember Between Runs? A Task Lives for Up to 31 Days. The Next Run Still Starts With Only Its Payload.

Does Google Cloud Tasks Remember Between Runs? A Task Lives for Up to 31 Days. The Next Run Still Starts With Only Its Payload. Google Cloud Tasks remembers the task, exactly as it was created, until the task is done or too old. A task sits in its queue with its payload, its target, and its schedule, and it stays there through retries until it succeeds, exhausts its attempts, or reaches 31 days of age. That is dependable delivery memory. What Cloud Tasks never keeps is anything the handler lear

Does Azure Event Hubs Remember Between Runs? Events Stay in the Partitioned Log for Up to 90 Days. The Next Run Still Starts With Only Its Event.

Does Azure Event Hubs Remember Between Runs? Events Stay in the Partitioned Log for Up to 90 Days. The Next Run Still Starts With Only Its Event. Azure Event Hubs remembers the event, in full, in the log. An event hub is an append-only log that stores events, producers add new events to the end of a partition, and those events stay there for the whole retention period whether anyone read them or not. That is real retention, and it is stronger than a queue that deletes on delivery. What Event Hu

Does Apache RocketMQ Remember Between Runs? Messages Stay in the CommitLog for Days. The Next Run Still Starts With Only Its Message.

Does Apache RocketMQ Remember Between Runs? Messages Stay in the CommitLog for Days. The Next Run Still Starts With Only Its Message. Apache RocketMQ remembers the message, in full, on disk. A broker writes every message it receives into a shared physical log, keeps it for the whole storage duration whether anyone consumed it or not, and lets a consumer go back and read it again inside that window. That is real retention, and it is stronger than a queue that deletes on delivery. What RocketMQ n