// A sample stream producer using XADD.
// https://redis.io/commands/xadd/
import { createClient } from 'redis';

const client = createClient();

await client.connect();

for (let i = 0; i < 10000; i++) {
  await client.xAdd(
    'mystream',
    '*', // * = Let Redis generate a timestamp ID for this new entry.
    // Payload to add to the stream:
    {
      i: i.toString()
      // Other name/value pairs can go here as required...
    }
  );

  // Also add to a stream whose length we will cap at approximately
  // 1000 entries using the MAXLEN trimming strategy:
  // https://redis.io/commands/xadd/

  await client.xAdd(
    'mytrimmedstream', 
    '*',
    // Payload to add to the stream:
    {
      i: i.toString()
      // Other name/value pairs can go here as required...
    },
    // Specify a trimming strategy...
    {
      TRIM: {
        strategy: 'MAXLEN', // Trim by length.
        strategyModifier: '~', // Approximate trimming.
        threshold: 1000 // Retain around 1000 entries.
      }
    }
  );
}

// Take a look at how many entries are in the streams...
// https://redis.io/commands/xlen/
// Should be 10000:
console.log(`Length of mystream: ${await client.xLen('mystream')}.`);
// Should be approximately 1000:
console.log(`Length of mytrimmedstream: ${await client.xLen('mytrimmedstream')}.`);

client.destroy();
