Redis 2.6 release notes ======================= ** IMPORTANT ** Check the 'Migrating from 2.4 to 2.6' section at the end of this file for information about what changed between 2.4 and 2.6 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.6.17 ] Release date: 11 Dec 2013 UPGRADE URGENCY: MODERATE. * [FIX] redis-cli: fix big keys search when the key no longer exist. * [FIX] Allow AUTH / PING when disconnected from slave with serve-stale-data on. * [FIX] redis-benchmark: update help for new __rand_int__ form. * [FIX] Fix broken rdbWriteRaw() return value check in rdb.c (harmless). * [FIX] Log to what master a slave is going to connect to. * [FIX] Only run the fast active expire cycle if master & enabled. * [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. --[ Redis 2.6.16 ] Release date: 28 Aug 2013 UPGRADE URGENCY: MODERATE. * [FIX] Stop writes when fork() fails when trying to BGSAVE. BGSAVE errors were trapped only in the case the saving child failed, so the fork() error was no trapped as no child is created at all. * [FIX] Fix a serious memory efficiency regression, Redis 2.6.16 is significantly better with large values (>= a few kbytes) and will be able to store two times the amount of data compared to Redis 2.6.15 when values are in that range. * [FIX] Fixed an issue with Table conversion in the lua-cmsgpack library exposed by the Redis scripting engine. * [NEW] DEBUG SDSLEN was introduced to debug memory inefficiencies due to SDS allocation more easily. --[ Redis 2.6.15 ] Release date: 21 Aug 2013 UPGRADE URGENCY: MODERATE, upgrade ASAP only if you experience issues related to the expired keys collection algorithm, or if you use the ZUNIONSTORE command. * [FIX] Improved expired keys collection algorithm. Even under heavy load keys to be expired can't accumulate because of lack of CPU time. * [FIX] Fixed Issue #1240, ZUNIONSTORE could lead to wrong result. * [NEW] redis-benchmark improvements. * [NEW] dict.c API wrong usage detection. WARNING: redis-benchmark released with 2.6.15 features non backward compatible change in the way the random arguments are specified, use the --help option for more information. --[ Redis 2.6.14 ] Release date: 20 Jun 2013 UPGRADE URGENCY: HIGH because of the following two issues: * Lua scripting + Replication + AOF in slaves problem (see Issue #1164). * AOF + expires possible race condition (see Issue #1079). * [FIX] AOF bug: expire could be removed from key on AOF rewrite. * [FIX] Allow writes from scripts called by AOF loading in read-only slaves. * [FIX] Sentinel: parse new version of INFO replication output correctly. * [NEW] Reset masterauth if an empty string is configured. --[ Redis 2.6.13 ] UPGRADE URGENCY: MODERATE, nothing very critical but upgrading is suggested if you experienced: 1) Strange issues with Lua scripting. 2) Not reconfigured reappearing master using Sentinel. 3) Server continusly trying to save on save error. This version of Redis may also help with AOF and slow / busy disks and latency issues. * [FIX] Throttle BGSAVE attempt on saving error. * [FIX] redis-cli: raise error on bad command line switch. * [FIX] Redis/Jemalloc Gitignore were too aggressive. * [FIX] Test: fix RDB test checking file permissions. * [FIX] Sentinel: always redirect on master->slave transition. * [FIX] Lua updated to version 5.1.5. Fixes rare scripting issues. * [NEW] AOF: improved latency figures with slow/busy disks. * [NEW] Sentinel: turn old master into a slave when it comes back. * [NEW] More explicit panic message on out of memory. * [NEW] redis-cli: --latency-history mode implemented. --[ Redis 2.6.12 ] UPGRADE URGENCY: MODERATE, nothing very critical but a few non trivial bugs. * [BUGFIX] redis-cli --bigkeys: don't crash with empty DB. * [BUGFIX] stop-writes-on-bgsave-error now works in redis.conf * [BUGFIX] Don't crash at startup if RDB is there but can't be opened. * [BUGFIX] Initial value for master_link_down_since_seconds is now huge. * [BUGFIX] Allow SELECT while loading the DB. * [BUGFIX] Don't replicate/AOF an empty MULTI/EXEC if the transaction is empty or containing just read-only commands. * [BUGFIX] EXPIRE should not be able to resurrect keys (see issue #1026). * [IMPROVED] Extended SET back ported from Redis 2.8 / unstable See http://redis.io/commands/set for more information. * [IMPROVED] Test suite improved. --[ Redis 2.6.11 ] UPGRADE URGENCY: LOW, however updating is encouraged if you have many instances per server and you want to lower the CPU / energy usage. * [BUGFIX] Replication: more strict error checking for master PING reply. * [BUGFIX] redis-cli: use keepalive socket option for improved reliability. * [BUGFIX] Allow AUTH while loading the DB in memory. * [BUGFIX] Don't segfault on unbalanced quotes while parsing config file. * [BUGFIX] Don't segfault if command gets propagated to AOF / replication link as another command name that was renamed in redis.conf * [IMPROVED] serverCron() frequency is now a runtime parameter (was REDIS_HZ). * [IMPROVED] Use a lot less CPU when idle, even with many configured DBs. --[ Redis 2.6.10 ] UPGRADE URGENCY: MODERATE, this release contains many non-critical fixes and many small improvements. * [BUGFIX] redis-cli --rdb, fixed when the server sends newlines to ping. * [BUGFIX] redis-cli, minor fixes on connection handling, prompt. * [BUGFIX] Slow log: don't log EXEC, just executed commands. * [BUGFIX] On failed shutdown don't try again and again compulsively. * [BUGFIX] Fix build on sunos without backtrace(). * [BUGFIX] UNSUBSCRIBE and PUNSUBSCRIBE: always provide a reply (see 742e580) * [BUGFIX] Lua struct library was broken, upgraded. * [BUGFIX] Fix a bug in srandmemberWithCountCommand() with count argument. * [BUGFIX] Test: disable clients timeout to prevent issues on slow systems. * [BUGFIX] Sentinel: don't advertise the promoted slave as master too early. * [IMPROVED] Whitelist SIGUSR1, see http://redis.io/topics/signals. * [IMPROVED] Simpler to understand redis-cli --bigkeys output. * [IMPROVED] Test now works with tclsh > 8.5. * [IMPROVED] Added option to turn of the Nagle algorithm in slave socket. * [IMPROVED] Optionally use SO_KEEPALIVE to detect dead peers. --[ Redis 2.6.9 ] UPGRADE URGENCY: MODERATE if you use replication. * [BUGFIX] Changing master at runtime (SLAVEOF command) in presence of network problems, or in very rapid succession, could result in non-critical problems (GitHub Issue #828). * [IMPROVED] CLINGET GETNAME and SETNAME to set and query connection names reported by CLIENT LIST. Very useful for debugging of problems. * [IMPROVED] redis-cli is now able to transfer an RDB file from a remote server to a local file using the --rdb command line option. --[ Redis 2.6.8 ] UPGRADE URGENCY: MODERATE if you use Lua scripting. Otherwise LOW. * [BUGFIX] Multiple fixes for EVAL (issue #872). * [BUGFIX] Fix overflow in mstime() in redis-cli and benchmark. * [BUGFIX] Fix Linux / PPC64 behavior by correcting endianess detection. * [BUGFIX] Fix NetBSD build by defining _XOPEN_SOURCE appropriately. * [BUGFIX] Added missing license and copyright in a few places. * [BUGFIX] Better error reporting when fd event creation fails. --[ Redis 2.6.7 ] UPGRADE URGENCY: MODERATE (unless you BLPOP using the same key multiple times). * [BUGFIX] Don't crash if BLPOP & co are called with the same key repeated multiple times (Issue #801). --[ Redis 2.6.6 ] UPGRADE URGENCY: CRITICAL if you experienced one more more crashes. MODERATE if Redis is running fine for you. * [BUGFIX] Jemalloc updated to 3.2.0. --[ Redis 2.6.5 ] UPGRADE URGENCY: MODERATE Warning: this release of Redis introduces a different behavior in MULTI/EXEC handling of errors. This was done because the new behavior is safer compared to the old one, and should not break any code targeting Redis 2.6 in a critical way. For more information check http://redis.io/topics/transactions * [IMPROVED] RDB/AOF childern now log amount of additional memory used because of copy on write. * [BUGFIX] MIGRATE non critical fixes (see commits for details). * [BUGFIX] MULTI/EXEC: now EXEC aborts on errors before EXEC. * [BUGFIX] Fix integer overflow in zunionInterGenericCommand resulting into Z[INTER|UNION][STORE] commands to crash under extremely unlikely conditions (almost impossible in real world). * [BUGFIX] EVALSHA is now case insensitive (and will not crash). --[ Redis 2.6.4 ] UPGRADE URGENCY: LOW * [IMPROVED] BSD license and copyright notice added to every .c and .h file. --[ Redis 2.6.2 ] UPGRADE URGENCY: LOW * [BUGFIX] The compilation fix for RHLE5 in 2.6.1 was broken. Fixed. * [IMPROVED] Linenoise updated, now supports Ctrl+w. ---[ Redis 2.6.1 ] UPGRADE URGENCY: LOW * [BUGFIX] Compilation on Linux < 2.6.17 or glibc < 2.6 fixed (RHLE5 & co). ---[ Redis 2.6.0 ] UPGRADE URGENCY: HIGH * [BUGFIX] Allow AUTH when server is in -BUSY state because of a slow script. * [BUGFIX] MULTI/EXEC flow now makes sense when observed in MONITOR * [BUGFIX] SCRIPT KILL now uses different error prefixes for different errors. * [BUGFIX] Default memory limit for 32bit archs lowered from 3.5 to 3 GB. * [BUGFIX] redis-check-dump is now compatible with RDB files generated by 2.6. * [IMPROVED] New field in INFO: slave_read_only. ---[ Redis 2.5.14 (2.6 Release Candidate 8) ] * [BUGFIX] Fixed compilation on FreeBSD. * [IMPROVED] SRANDMEMBER that returns multiple random elements. * [IMPROVED] Sentinel backported to 2.6. It will be taken in sync with 2.8. * [IMPROVED] Helper function for scripting to return errors and status replies. * [IMPROVED] SORT by nosort [ASC|DESC] uses sorted set elements ordering. * [BUGFIX] Better resistence to system clock skew. * [IMPROVED] Warn the user when the configured maxmemory seems odd. * [BUGFIX] Hashing function is now murmurhash2 for security purposes. * [IMPROVED] Install script no longer uses a template but redis.conf itself. ---[ Redis 2.5.13 (2.6 Release Candidate 7) ] UPGRADE URGENCY: HIGH * [BUGFIX] Theoretical bug in ziplist fixed. * [BUGFIX] Better out of memory handling (Log produced in log file). * [BUGFIX] Incrementally flush RDB file on slave side while performing the first synchronization with the master. This makes Redis less blocking in environments where disk I/O is slow. * [BUGFIX] Don't crash with Lua's redis.call() without arguments. * [BUGFIX] Don't crash after a big number of Lua calls on 32 bit systems because of a failed assertion. * [BUGFIX] Fix SORT behaviour when called from scripting. * [BUGFIX] Adjust slave PING period accordingly to REDIS_HZ define. * [BUGFIX] BITCOUNT: fix crash on overflowing arguments. * [BUGFIX] Return an error when SELECT argument is not an integer. * [BUGFIX] Blocking operations on lists were completely reimplemented for correctness. Now blocking list ops and pushes originated from Lua scripts will play well together and will be replicated and transmitted to the AOF correctly. * [IMPROVED] Send async PING before starting replication to avoid blocking if master allows us to connect but it is actually not able to reply. * [IMPROVED] Support slave-priority for Redis Sentinel. * [IMPROVED] Hiredis library updated. ---[ Redis 2.5.12 (2.6 Release Candidate 6) ] UPGRADE URGENCY: MODERATE. * [BUGFIX] Fixed a timing attack on AUTH (Issue #560). * [BUGFIX] Don't assume that "char" is signed. * [BUGFIX] Check that we have connection before enabling pipe mode. * [BUGFIX] Use the optimized version of the function to convert a double to its string representation. Compilation was disabled because of a typo in the #if statement. * [IMPROVED} REPLCONF internal command introduced, now INFO shows slaves with correct port numbers. This makes 2.5.12 Redis Sentinel compatible. * [IMPROVED] Truncate short write from the AOF for a cleaner restart. On short writes (for instance out of space) Redis will now try to remove the half-written data so that the next restart will work without the need for the "redis-check-aof" utility. * [IMPROVED] New in INFO: aof_last_bgrewrite_status * [IMPROVED] Allow Pub/Sub in contexts where other commands are blocked. * [BUGFIX] mark fd as writable when EPOLLERR or EPOLLHUP is returned by epoll_wait. ---[ Redis 2.5.11 (2.6 Release Candidate 5) ] UPGRADE URGENCY: HIGH. * [BUGFIX] Fixed Hash corruption when loading an RDB file generated by previous versions of Redis that encoded hashes using a different ziplist encoding format for small integers. All the fileds that are integers in the range 0-255 may not be recognized, or duplicated un updates, causing a crash when the ziplist is converted to a real hash. (Issue #547). * [BUGFIX] Fixed the count of memory used by output buffers in the setDeferredMultiBulkLength() function. ---[ Redis 2.5.10 (2.6 Release Candidate 4) ] UPGRADE URGENCY: HIGH. * [BUGFIX] Allow PREFIX to be overwritten on "make install". * [BUGFIX] Run the test with just one client if the computer is slow. * [BUGFIX] Event port support in our event driven libray. * [BUGFIX] Jemalloc updated to 3.0.0. This fixes a possibly AOF rewrite issue. See https://github.com/antirez/redis/issues/504 for info. * [BUGFIX] Fixed issue #516: ZINTERSTORE / ZUNIONSTORE with mixed sets/zsets. * [BUGFIX] Set fd to writable when poll(2) detects POLLERR or POLLHUP event. * [BUGFIX] Fixed RESTORE hash failure (Issue #532). * [IMPROVED] Allow an AOF rewrite buffer > 2GB (Related to issue #504). * [IMPROVED] Server cron function frequency is now configurable (REDIS_HZ). * [IMPROVED] Better, less blocking expired keys collection algorithm. * [FEATURE] New commands: BITOP and BITCOUNT. * [FEATURE] redis-cli --pipe for mass import. What's new in Redis 2.5.9 (aka 2.6 Release Candidate 3) ======================================================= UPGRADE URGENCY: critical, upgrade ASAP. * [BUGFIX] Fix for issue #500 (https://github.com/antirez/redis/pull/500). Redis 2.6-RC1 and RC2 may corrupt ziplist-encoded sorted sets produced by Redis 2.4.x. * [BUGFIX] Fixed several bugs in init.d script. * [BUGFIX] syncio.c functions modified for speed and correctness. On osx (and possibly other BSD-based systems) the slave would block on replication to send the SYNC command when the master was not available. This is fixed now, but was not affecting Linux installs. * Now when slave-serve-stale-data is set to yes and the master is down, instead of reporting a generic error Redis replies with -MASTERDOWN. What's new in Redis 2.5.8 (aka 2.6 Release Candidate 2) ======================================================= UPGRADE URGENCY: high for all the users of the KEYS command, otherwise low. * [BUGFIX] Fix for KEYS command: if the DB contains keys with expires the KEYS command may return the wrong output, having duplicated or missing keys. See issue #487 and #488 on github for details. What's new in Redis 2.5.7 (aka 2.6 Release Candidate 1) ======================================================= UPGRADE URGENCY: upgrade not recommended because this is an RC release. * This is the first release candidate for Redis 2.6. We are not aware of bugs, but part of this code is young and was never tested in production environments, so handle with care. An overview of new features and changes in Redis 2.6.x ====================================================== * Server side Lua scripting, see http://redis.io/commands/eval * Virtual Memory removed (was deprecated in 2.4) * Hardcoded limits about max number of clients removed. * AOF low level semantics is generally more sane, and especially when used in slaves. * Milliseconds resolution expires, also added new commands with milliseconds precision (PEXPIRE, PTTL, ...). * Better memory usage for "small" lists, ziplists and hashes when fields or values contain small integers. * Read only slaves. * New bit opeations: BITCOUNT and BITOP commands. * Clients max output buffer soft and hard limits. You can specifiy different limits for different classes of clients (normal,pubsub,slave). * More incremental (less blocking) expired keys collection algorithm, in practical terms this means that Redis is more responsive when a very big number of keys expire about at the same time. * AOF is now able to rewrite aggregate data types using variadic commands, often producing an AOF that is faster to save, load, and is smaller in size. * Every redis.conf directive is now accepted as a command line option for the redis-server binary, with the same name and number of arguments. * Hash table seed randomization for protection against collisions attacks. * Performances improved when writing large objects to Redis. * Integrated memory test, see redis-server --test-memory. * INCRBYFLOAT and HINCRBYFLOAT commands. * New DUMP, RESTORE, MIGRATE commands (back ported from Redis Cluster to 2.6). * CRC64 checksump in RDB files. * Better MONITOR output and behavior (now commands are logged before execution). * "Software Watchdog" feature to debug latency issues. * Significant parts of the core refactored or rewritten. New internal APIs and core changes allowed to develop Redis Cluster on top of the new code, however for 2.6 all the cluster code was removed, and will be released with Redis 3.0 when it is more complete and stable. * Redis ASCII art logo added at startup. * Crash report on memory violation or failed asserts improved significantly to make debugging of hard to catch bugs simpler. * redis-benchmark improvements: ability to run selected tests, CSV output, faster, better help. * redis-cli improvements: --eval for comfortable development of Lua scripts. * SHUTDOWN now supports two optional arguments: "SAVE" and "NOSAVE". * INFO output split into sections, the command is now able to just show pecific sections. * New statistics about how many time a command was called, and how much execution time it used (INFO commandstats). * More predictable SORT behavior in edge cases. * Better support for big endian and *BSD systems. * Build system improved. Migrating from 2.4 to 2.6 ========================= Redis 2.4 is mostly a strict subset of 2.6. However there are a few things that you should be aware of: * You can't use .rdb and AOF files generated with 2.6 into a 2.4 instance. * 2.6 slaves can be attached to 2.4 masters, but not the contrary, and only for the time needed to perform the version upgrade. There are also a few API differences, that are unlikely to cause problems, but it is better to keep them in mind: * SORT now will refuse to sort in numerical mode elements that can't be parsed as numbers. * EXPIREs now all have millisecond resolution (but this is very unlikely to break code that was not conceived exploting the previous resolution error in some way.) * INFO output is a bit different now, and contains empty lines and comments starting with '#'. All the major clients should be already fixed to work with the new INFO format. * Slaves are only read-only by default (but you can change this easily setting the "slave-read-only" configuration option to "no" editing your redis.conf or using CONFIG SET. The following INFO fields were renamed for consistency: changes_since_last_save -> rdb_changes_since_last_save bgsave_in_progress -> rdb_bgsave_in_progress last_save_time -> rdb_last_save_time last_bgsave_status -> rdb_last_bgsave_status bgrewriteaof_in_progress -> aof_rewrite_in_progress bgrewriteaof_scheduled -> aof_rewrite_scheduled The following redis.conf and CONFIG GET / SET parameters changed: * hash-max-zipmap-entries, now replaced by hash-max-ziplist-entries * hash-max-zipmap-value, now replaced by hash-max-ziplist-value * glueoutputbuf option was now completely removed (was deprecated) -------------------------------------------------------------------------------- Credits: Where not specified the implementation and design are done by Salvatore Sanfilippo and Pieter Noordhuis. Thanks to VMware 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