Redis v4.0.0 Release Notes

Release Date: 2018-08-14 // over 5 years ago
  • 🚀 This is a major release and contain breaking changes. Please read this changelog before upgrading.

    🔄 Changes since 4.0.0-3:

    🐛 Bug Fixes

    • port is ignored when path set to null (d40a99e), closes #668

    🔋 Features

    • export Pipeline for inheritances enabling (#675) (ca58249)
    • 📦 export ScanStream at package level (#667) (5eb4198)

    🔄 Changes since 3.x

    🐛 Bug Fixes

    • Sentinel: unreachable errors when sentinals are healthy (7bf6fea)
    • ⚠ resolve warning for Buffer() in Node.js 10 (6144c56)
    • don't add cluster.info to the failover queue before ready (491546d)
    • solves vulnerabilities dependencies (2950b79)
    • Cluster: issues when setting enableOfflineQueue to false (#649) (cfe4258)

    🐎 Performance Improvements

    • 🐎 upgrade redis-parser for better performance.

    🔋 Features

    • 👉 use native Promise instead of Bluebird, and allow users to switch back. (da60b8b)
    • ➕ add maxRetriesPerRequest option to limit the retries attempts per command (1babc13)
    • Redis#connect() will be resolved when status is ready (#648) (f0c600b)
    • ➕ add debug details for connection pool (9ec16b6)
    • wait for ready state before resolving cluster.connect() (7517a73)

    💥 BREAKING CHANGES

    • ⬇️ Drop support for < node v6
    • 👉 Use native Promise instead of Bluebird. This change makes all the code that rely on the features provided by Bluebird not working ⏱ anymore. For example, redis.get('foo').timeout(500) now should be failed since the native ⏱ Promise doesn't support the timeout method. You can switch back to the Bluebird implementation by setting Redis.Promise:
    const Redis = require('ioredis')
    Redis.Promise = require('bluebird')
    
    const redis = new Redis()
    
    // Use bluebird
    assert.equal(redis.get().constructor, require('bluebird'))
    
    // You can change the Promise implementation at any time:
    Redis.Promise = global.Promise
    assert.equal(redis.get().constructor, global.Promise)
    
    • Redis#connect() will be resolved when status is ready instead of connect:
    const redis = new Redis({ lazyConnect: true })
    redis.connect().then(() => {
      assert(redis.status === 'ready')
    })
    
    • Cluster#connect() will be resolved when the connection status become ready instead of connect.
    • The maxRetriesPerRequest is set to 20 instead of null (same behavior as ioredis v3) 0️⃣ by default. So when a redis server is down, pending commands won't wait forever until the connection become alive, instead, they only wait about 10s (depends on the retryStrategy option)
    • The new keyword is required explicitly. Calling Redis as a function like Redis(/* options /)is deprecated and will not be supported in the next major version, usenew Redis(/ options */)` instead.