Open
Description
I'm using Amazon ElastiCache running Redis 7.1.0 (I do realize this is unsupported version, but thought that this is worth reporting anyway).
When I'm running the following script:
import redis from 'redis'
async function main() {
const client = redis.createClient({
url: 'redis://my-elasticache-cluster:6379'
})
await client.connect()
console.log('Connected to Redis')
const value = Array.from({ length: 1000 }, (_) => 'ä').join('')
await client.set('test-key', value, {
EX: 5
})
const result = await client.get('test-key')
console.log('Value got from Redis:', result)
console.log('Has replacement character', result && result.includes('�'))
await client.disconnect()
}
main().catch((err) => {
console.error('Unhandled error:', err)
process.exit(1)
})
I sometimes get the following output (about 50% of the time), scroll right to see the error:
Connected to Redis
Value got from Redis: äääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääää��ääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääää
Has replacement character true
If I install pnpm i redis@^4
, this never happens. I could not replicate this with local redis (but did not test the same version, since I could not find 7.1 images easily).
Speculation - somewhere there is a mechanism where data is coming in as a separate byte chunks, and these incomplete byte chunks are being read as UTF-8 strings, even though they might be broken mid-codepoint and the conversion should wait until the bytes are retrieved in full?
Metadata
Metadata
Assignees
Labels
No labels