Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions local_examples/cmds_stream/ioredis/cmds-stream.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,32 @@ assert.deepEqual(res4[1][1], ['field1', 'value1', 'field2', 'value2', 'field3',
await redis.del('mystream');
// REMOVE_END

// STEP_START xadd2
const res5 = await redis.call('XADD', 'mystream', 'IDMP', 'producer1', 'msg1', '*', 'field', 'value');
console.log(res5); // >>> 1726055713867-0

// Attempting to add the same message again with IDMP returns the original entry ID
const res6 = await redis.call('XADD', 'mystream', 'IDMP', 'producer1', 'msg1', '*', 'field', 'different_value');
console.log(res6); // >>> 1726055713867-0 (same ID as res5, message was deduplicated)

const res7 = await redis.call('XADD', 'mystream', 'IDMPAUTO', 'producer2', '*', 'field', 'value');
console.log(res7); // >>> 1726055713867-1

// Auto-generated idempotent ID prevents duplicates for same producer+content
const res8 = await redis.call('XADD', 'mystream', 'IDMPAUTO', 'producer2', '*', 'field', 'value');
console.log(res8); // >>> 1726055713867-1 (same ID as res7, duplicate detected)

// Configure idempotent message processing settings
const res9 = await redis.call('XCFGSET', 'mystream', 'IDMP-DURATION', 300, 'IDMP-MAXSIZE', 1000);
console.log(res9); // >>> OK
// STEP_END

// REMOVE_START
assert.equal(res5, res6);
assert.equal(res7, res8);
await redis.del('mystream');
// REMOVE_END

// HIDE_START
redis.disconnect();
// HIDE_END
26 changes: 26 additions & 0 deletions local_examples/cmds_stream/ruby/cmds_stream.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,31 @@ def assert_equal(expected, actual)
assert_equal({ 'name' => 'Sara', 'surname' => 'OConnor' }, res4[0][1])
assert_equal({ 'field1' => 'value1', 'field2' => 'value2', 'field3' => 'value3' }, res4[1][1])
r.del('mystream')
# REMOVE_END

# STEP_START xadd2
res5 = r.call('XADD', 'mystream', 'IDMP', 'producer1', 'msg1', '*', 'field', 'value')
puts res5 # >>> 1726055713867-0

# Attempting to add the same message again with IDMP returns the original entry ID
res6 = r.call('XADD', 'mystream', 'IDMP', 'producer1', 'msg1', '*', 'field', 'different_value')
puts res6 # >>> 1726055713867-0 (same ID as res5, message was deduplicated)

res7 = r.call('XADD', 'mystream', 'IDMPAUTO', 'producer2', '*', 'field', 'value')
puts res7 # >>> 1726055713867-1

# Auto-generated idempotent ID prevents duplicates for same producer+content
res8 = r.call('XADD', 'mystream', 'IDMPAUTO', 'producer2', '*', 'field', 'value')
puts res8 # >>> 1726055713867-1 (same ID as res7, duplicate detected)

# Configure idempotent message processing settings
res9 = r.call('XCFGSET', 'mystream', 'IDMP-DURATION', 300, 'IDMP-MAXSIZE', 1000)
puts res9 # >>> OK
# STEP_END

# REMOVE_START
assert_equal(res5, res6)
assert_equal(res7, res8)
r.del('mystream')
r.close
# REMOVE_END
Loading