Redis 2.8 release notes
=======================

** IMPORTANT ** Check the 'Migrating from 2.6 to 2.8' section at the end of
                this file for information about what changed between 2.6 and
                2.8 and how this may affect your application.

--------------------------------------------------------------------------------
Upgrade urgency levels:

LOW:      No need to upgrade unless there are new features you want to use.
MODERATE: Program an upgrade of the server, but it's not urgent.
HIGH:     There is a critical bug that may affect a subset of users. Upgrade!
CRITICAL: There is a critical bug affecting MOST USERS. Upgrade ASAP.
--------------------------------------------------------------------------------

--[ Redis 2.8.9 ] Release date: 22 Apr 2014

# UPGRADE URGENCY: LOW, only new features introduced, no bugs fixed.

* [NEW] The HyperLogLog data structure. You can read more about it
        in this blog post. http://antirez.com/news/75
* [NEW] The Sorted Set data type has now support for lexicographic range
        queries, check the new commands ZRANGEBYLEX, ZLEXCOUNT and
        ZREMRANGEBYLEX, which are documented at http://redis.io.

--[ Redis 2.8.8 ] Release date: 25 Mar 2014

# UPGRADE URGENCY: HIGH for Redis, LOW for Sentinel. There is a potentially
                   critical bug fix causing data loss in Redis but it requires
                   a combination of disk full and the use of the
                   SHUTDOWN command.

* [FIX] Fixed data loss when SHUTDOWN was used with a disk full condition.
* [FIX] Fixed a memory leak in the SORT syntax error processing.
* [FIX] When Sentinel down-after-milliseconds parameter is modified at runtime
        now it gets propagated to all the slaves and sentinel instances
        of the master.
* [FIX] `install_server.sh` script finally fixed.
* [FIX] Different fixes to maxclients handling.

* [NEW] Sentinels are now able to send update messages in a peer-to-peer
        fashion even if no Redis instances are available. Now the Sentinel
        liveness property that the most updated configuration in a given
        partition is propagated to all the Sentinels is extended to partitions
        without reachable instances.
* [NEW] Sentinel safety properties are now ensured in a crash-recovery system
        model since some state is persisted on disk before replying to other
        nodes, and reloaded at startup.
* [NEW] Sentinel now uses CLIENT SETNAME so that it is easy to identify
        Sentinels using CLIENT LIST among other clients.
* [NEW] Sentinel failure detection and reconnection code improved.
* [NEW] Use all 24 bits (instead of 22) for the Redis objects LRU field.
        Note that the new LRU algorithm using eviction pools was not backported
        from unstable for safery / code maturity concerns.
* [NEW] Majory speedup for the INFO command (it is now 6 times faster).
* [NEW] More Sentinel unit tests.
* [NEW] New command DEBUG ERROR returns the specified error. Example:
        DEBUG ERROR "LOADING database". This is handy to write Redis client
        libraries unit tests.
* [NEW] redis-cli now supports multi-line editing via updated linenoise lib.

Thanks to Matt Stancliff and Jan-Erik Rediger for the work done in the context
of this release.

--[ Redis 2.8.7 ] Release date: 5 Mar 2014

# UPGRADE URGENCY: LOW for Redis, LOW for Sentinel. However this release adds
                   new features so users may want to upgrade in order to
                   exploit the new functionalities.

* [FIX] Sometimes the absolute config file path was obtained in a wrong way.
        This happened when there was a "dir" directive inside the config file
        and at the same time the configuration file was given as a relative
        path to redis-server or redis-sentinel executables.
* [FIX] redis-cli: Automatically enter --slave mode when SYNC or PSYNC are
        called during an interactive session.
* [FIX] Sentinel "IDONTKNOW" error removed as it does not made sense with the
        new Sentinel design. This error was actually a fix for a design error
        in the first implementation of Sentinel.
* [FIX] Sentinel: added a missing exit() call to abort after config file
        checks at startup. This error was introduced with an improvement in
        a previous 2.8 release.
* [FIX] BITCOUNT: fixed unaligned access causing issues in sparc and other
        archs not capable of dealing with unaligned accesses. This also makes
        the code faster in archs where unaligned accesses are allowed.
* [FIX] Sentinel: better nodes fail over start time desynchronization to avoid
        split-brain during the voting process needed to get authorization to
        fail over. This means the system is less likely to need to retry
        and will fail over faster. No changes in behavior / correctness.
* [FIX] Force INFO used_memory_peak to match peak memory. This generated some
        confusion among users even if it was not an actual bug.

* [NEW] Sentinel unit tests and framework. More tests needed and units must
        be improved in order to have less false positives, but it is a start
        and features a debugging console that is useful to fix tests or to
        inspect bugs causing tests failures.
* [NEW] New Sentinel events: +/-monitor and +set used to monitor when an
        instance to monitor is added or removed, or when a configuration
        is modified via SENTINEL SET.
* [NEW] Redis-cli updated to use SCAN instead of random sampling via
        RANDOMKEY in order to implement --bigkeys feature. Moreover the
        implementation now supports pipelining and reports more information
        at the end of the scan. Much faster, much better. A special thank
        you to Michael Grunder for this improvement.
* [NEW] redis-cli now supports a new --intrinsic-latency mode that is able
        to meter the latency of a system due to kernel / hypervisor.
        How to use it is explained at http://redis.io/topics/latency.
* [NEW] New command BITPOS: find first bit set or clear in a bitmap.
* [NEW] CONFIG REWRITE calls are now logged.

--[ Redis 2.8.6 ] Release date: 13 Feb 2014

# UPGRADE URGENCY: HIGH for Redis, LOW for Sentinel. Redis users using Lua
                   scripts with EVALSHA and attached slaves and/or AOF
                   persistence should consider upgrading ASAP.

* [FIX] Fixed an critical EVALSHA script cache bug: scripts executed may not
        propagate to AOF / Slaves correctly under certain conditions.
        See issue #1549 at Github for more information.
* [FIX] Fixed multiple bugs resulting into closing the link with master or slave
        during replication without good reasons. This will result in useless
        resynchronizations, or infinite loops where the replication link can't
        be established.
* [FIX] Don't count the time needed to populate the buffers of clients waiting
        in MONITOR mode when populating the Slow Log entries.

* [NEW] AOF write errors (like no space on device) no longer abort Redis if the
        fsync policy is none or every second. The database enters a read-only
        mode where every write is refused with an error. Normal operations are
        restored as soon as Redis is able to append again data to the AOF file.
* [NEW] Sentinel now accepts SHUTDOWN command.

--[ Redis 2.8.5 ] Release date: 4 Feb 2014

# UPGRADE URGENCY: HIGH for Redis, LOW for Sentinel. Redis users using Lua
                   scripts with expires, and Redis users relying on the
                   ability of Redis to block writes on RDB saving errors
                   should plan to upgrade ASAP.

* [FIX] Fixed a replication bug caused by Lua scripts + expired keys: keys could
        expire in the middle of scripts causing non-deterministic behavior.
* [FIX] MISCONFIG error if condition fixed, the server was no longer able
        to stop writes on RDB misconfiguration after this error was introduced.
* [FIX] REDIS_AOF_REWRITE_MIN_SIZE is now 64mb like example redis.conf default.
* [FIX] Perform fflush() before fsync() in rio.c (bug without actual effects).
* [FIX] Don't log MONITOR clients as disconnecting slaves.
* [FIX] SENTINEL MASTER arity check fixed. Crashed the Sentinel instance when
        the command was given without arguments.

* [NEW] Allow CONFIG and SHUTDOWN while in stale-slave state.
* [NEW] Support for configurable TCP listen(2) backlog size.
* [NEW] redis-cli supports SCAN via the --scan and --pattern options.
* [NEW] SENTINEL SET master quorum via runtime API implemented.

--[ Redis 2.8.4 ] Release date: 13 Jan 2014

# UPGRADE URGENCY: MODERATE for Redis and Sentinel.

* [FIX] Makefile compatibility with non common make variants improved.
* [FIX] SDIFF crash in very unlikely to trigger state fixed.
* [FIX] Config rewriting fixed: don't wipe options unknown to the rewrite
        process.
* [FIX] Set TCP port to 0 works again to disable TCP networking.
* [FIX] Fixed replication with old Redis instances as masters by not
        sending REPLCONF ACK to them.
* [FIX] Fix keyspace notifications rewrite and CONFIG GET output.
* [FIX] Fix RESTORE TTL handling in 32 bit systems (32 bit overflow).

* [NEW] Sentinel now has a run time configuration API.
* [NEW] Log when we lost connection with master or slave.
* [NEW] When instance is turned from slave to master now inherits the
        old master replication offset when possible. This improves the
        Sentinel failover procedure.

--[ Redis 2.8.3 ] Release date: 11 Dec 2013

# UPGRADE URGENCY: MODERATE for Redis, HIGH for Sentinel.

* [FIX] Sentinel instance role sampling fixed, the system is now more
        reliable during failover and when reconfiguring instances with
        non matching configuration.
* [FIX] Inline requests are now handled even when terminated with just LF.
* [FIX] Replication timeout handling greatly improved, now the slave is able
        to ping the master while removing the old data from memory, and while
        loading the new RDB file. This avoid false timeouts sensed by
        masters.
* [FIX] Fixed a replication bug involving 32 bit instances and big datasets
        hard to compress that resulted into more than 2GB of RDB file sent.
* [FIX] Return error for inline requests with unbalanced quotes.
* [FIX] Publish the slave replication offset even when disconnected from the
        master if there is still a cached master instance.

--[ Redis 2.8.2 ] Release date: 2 Dec 2013

# UPGRADE URGENCY: MODERATE for both Redis and Sentinel.

* [FIX] Sentinel better desynchronization to avoid split-brain elections
        where no Sentinel managed to get elected.
* [FIX] Stop accepting writes on "MISCONF" error only if master, not slave.
* [FIX] Reply to PING with an error on "MISCONF" errors.

--[ Redis 2.8.1 ] Release date: 25 Nov 2013

# UPGRADE URGENCY: LOW for Redis, CRITICAL for Senitnel. You don't need to
                   upgrade your Redis instances but it is highly recommended
                   to upgrade and restart all the Sentinel processes.

* [FIX] Fixed a bug in "new Sentinel" config propagation.
* [FIX] Fixed a false positive in Redis tests.

--[ Redis 2.8.0 ] Release date: 22 Nov 2013

# UPGRADE URGENCY: LOW, unless you want to upgrade to new Sentinel code.

* [FIX] Fixed an error in rdbWriteRaw() that should have no practical impact.
* [NEW] Log the new master when SLAVEOF command is used.
* [NEW] Sentinel code synchronized with the unstable branch, the new Sentinel
        is a reimplementation that uses more reliable algorithms.

--[ Redis 2.8 Release Candidate 6 (2.7.106) ] Release date: 6 Nov 2013

This is the 6th release candidate of Redis 2.8 (official version is 2.7.106).

# UPGRADE URGENCY: LOW, only new features back ported, no fixes.

* [NEW] SCAN, SSCAN, HSCAN, ZSCAN commands.

--[ Redis 2.8 Release Candidate 5 (2.7.105) ] Release date: 9 Oct 2013

This is the 5th release candidate of Redis 2.8 (official version is 2.7.105).
Important bugs fixed inside.

# UPGRADE URGENCY: HIGH because of many non critical replication bugs fixed.

* [FIX] redis-cli: don't crash with --bigkeys when the key no longer exist.
* [FIX] Allow AUTH / PING when disconnected from slave and serve-stale-data is no.
* [FIX] PSYNC: safer handling of PSYNC requests with offsets in the future.
* [FIX] Replication: Fix master timeout detection.
* [FIX] Replication: Correctly install the write handler after successful PSYNC.

--[ Redis 2.8 Release Candidate 4 (2.7.104) ] Release date: 30 Aug 2013

This is the fourth release candidate of Redis 2.8 (official version is 2.7.104).
Important bugs fixed inside.

# UPGRADE URGENCY: HIGH because of the EVAL memory leak.

* [FIX] Fixed a serious EVAL memory leak in the Lua stack.
* [FIX] Fixed server startup when no IPv6 address exists in any interface.
* [FIX] Send MISCONFIG error when BGSAVE fails because can't fork.
* [FIX] Memory efficiency with large (> a few kbytes) values improved considerably.
* [NEW] DEBUG SDSLEN for sds memory debugging.

--[ Redis 2.8 Release Candidate 3 (2.7.103) ] Release date: 19 Aug 2013

This is the third release candidate of Redis 2.8 (official version is 2.7.103).
Important bugs fixed inside.

# UPGRADE URGENCY: HIGH

* [FIX] Improved expired keys collection algorithm. Even under heavy load keys
        to be expired can't accumulate because of lack of CPU time.
* [FIX] Replication speed regression fixed (issue #1238).
* [FIX] Fixed an hard to trigger PSYNC bug.
* [FIX] Fixed Issue #1240, ZUNIONSTORE could lead to wrong result.
* [NEW] Add per-db average TTL information in INFO output.
* [NEW] redis-benchmark improvements.
* [NEW] dict.c API wrong usage detection.

--[ Redis 2.8 Release Candidate 2 (2.7.102) ] Release date: 30 Jul 2013

This is the second release candidate of Redis 2.8 (official version is 2.7.102).
Important bugs fixed inside.

# UPGRADE URGENCY: HIGH

* [FIX] Fixed a critical replication bug, see issue #1221.
* [NEW] The new inline protocol now accepts quoted strings like, for example
        you can now type in a telnet session: set 'foo bar' "hello world\n".

--[ Redis 2.8 Release Candidate 1 (2.7.101) ] Release date: 18 Jul 2013

This is the first release candidate of Redis 2.8 (official version is 2.7.101).

The following is a list of improvements in Redis 2.8, compared to Redis 2.6.

* [NEW] Slaves are now able to partially resynchronize with the master, so most
        of the times a full resynchronization with the RDB creation in the master
        side is not needed when the master-slave link is disconnected for a short
        amount of time.
* [NEW] Experimental IPv6 support.
* [NEW] Slaves explicitly ping masters now, a master is able to detect a timed out
        slave independently.
* [NEW] Masters can stop accepting writes if not enough slaves with a given
        maximum latency are connected.
* [NEW] Keyspace changes notifications via Pub/Sub.
* [NEW] CONFIG SET maxclients is now available.
* [NEW] Ability to bind multiple IP addresses.
* [NEW] Set process names so that you can recognize, in the "ps" command output,
        the listening port of an instance, or if it is a saving child.
* [NEW] Automatic memory check on crash.
* [NEW] CONFIG REWRITE is able to materialize the changes in the configuration
        operated using CONFIG SET into the redis.conf file.
* [NEW] More NetBSD friendly code base.
* [NEW] PUBSUB command for Pub/Sub introspection capabilities.
* [NEW] EVALSHA can now be replicated as such, without requiring to be expanded
        to a full EVAL for the replication link.
* [NEW] Better Lua scripts error reporting.
* [NEW] SDIFF performance improved.
* [FIX] A number of bugfixes.

Migrating from 2.6 to 2.8
=========================

Redis 2.6 is mostly a strict subset of 2.8. However there are a few things
that you should be aware of:

The following commands changed behavior:

    * The TTL and PTTL commands now return -2 if the key does not exist and
      -1 if it exists but has no associated expire. Redis 2.6 and previous
      versions used to return -1 for both the conditions.
    * SORT with ALPHA now sorts according to local collation locale if no STORE
      option is used.
    * ZADD/ZINCRBY are now able to accept a bigger range of values as valid
      scores, that is, all the values you may end having as a result of
      calling ZINCRBY multiple times.
    * Many errors are now prefixed by a more specific error code instead of
      the generic -ERR, for example -WRONGTYPE, -NOAUTH, ...
    * PUBLISH called inside Lua scripts is now correctly propagated to slaves.

The following redis.conf and CONFIG GET / SET parameters changed:

    * logfile now uses the empty string in order to log to standard output,
      so 'logfile stdout' is now invalid, use 'logfile ""' instead.

The following INFO fields changed format in a non-backward compatible way:

    * The list of slaves in INFO is now in field=value format.

Replication:

    Redis 2.8 can be used as slave for Redis 2.6, but doing this is only
    a good idea for the short amount of time needed to upgrade your servers.
    We suggest to update both master and slaves at about the same time.

--------------------------------------------------------------------------------

Credits: Where not specified the implementation and design is done by
Salvatore Sanfilippo. Thanks to VMware and Pivotal for making all
this possible. Also many thanks to all the other contributors and the amazing
community we have.

See commit messages for more credits.

Cheers,
Salvatore
