|
| 1 | +--- |
| 2 | +Title: Redis Community Edition 7.4 release notes |
| 3 | +alwaysopen: false |
| 4 | +categories: |
| 5 | +- docs |
| 6 | +- operate |
| 7 | +- stack |
| 8 | +description: First GA release of Redis Community Edition 7.4. |
| 9 | +linkTitle: v7.4.0 (July 2024) |
| 10 | +min-version-db: blah |
| 11 | +min-version-rs: blah |
| 12 | +weight: 100 |
| 13 | +--- |
| 14 | +## Redis Community Edition 7.4.1 (October 2024) |
| 15 | + |
| 16 | +Upgrade urgency SECURITY: See security fixes below. |
| 17 | + |
| 18 | +### Security fixes |
| 19 | +* (CVE-2024-31449) Lua library commands may lead to stack overflow and potential RCE. |
| 20 | +* (CVE-2024-31227) Potential Denial-of-service due to malformed ACL selectors. |
| 21 | +* (CVE-2024-31228) Potential Denial-of-service due to unbounded pattern matching. |
| 22 | + |
| 23 | +For more information, see the [Redis blog post](https://redis.io/blog/security-advisory-cve-2024-31449-cve-2024-31227-cve-2024-31228/) about these vulnerabilities. |
| 24 | + |
| 25 | +## Redis Community Edition 7.4 (July 2024) |
| 26 | + |
| 27 | +This is the General Availability release of Redis Community Edition 7.4. |
| 28 | + |
| 29 | +**Changes to new 7.4 features (compared to 7.4 RC2)** |
| 30 | +* [#13391](https://github.com/redis/redis/pull/13391),[#13438](https://github.com/redis/redis/pull/13438) Hash - expiration of individual fields: RDB file format changes |
| 31 | +* [#13372](https://github.com/redis/redis/pull/13372) Hash - expiration of individual fields: rename and fix counting of `expired_subkeys` metric |
| 32 | +* [#13372](https://github.com/redis/redis/pull/13372) Hash - expiration of individual fields: rename `INFO` keyspace field to `subexpiry` |
| 33 | + |
| 34 | +**Configuration parameters** |
| 35 | +* [#13400](https://github.com/redis/redis/pull/13400) Add hide-user-data-from-log - allows hiding user data from the log file |
| 36 | + |
| 37 | +**Bug fixes** |
| 38 | +* [#13407](https://github.com/redis/redis/pull/13407) Trigger Lua GC after `SCRIPT LOAD` |
| 39 | +* [#13380](https://github.com/redis/redis/pull/13380) Fix possible crash due to OOM panic on invalid command |
| 40 | +* [#13383](https://github.com/redis/redis/pull/13383) `FUNCTION FLUSH` - improve Lua GC behavior and fix thread race in ASYNC mode |
| 41 | +* [#13408](https://github.com/redis/redis/pull/13408) `HEXPIRE`-like commands should emit `HDEL` keyspace notification if expire time is in the past |
| 42 | + |
| 43 | +## Redis Community Edition 7.4-rc2 (June 2024) |
| 44 | +Upgrade urgency LOW: This is the second Release Candidate for Redis Community Edition 7.4. |
| 45 | + |
| 46 | +**Performance and resource utilization improvements** |
| 47 | +* [#13296](https://github.com/redis/redis/pull/13296) Optimize CPU cache efficiency |
| 48 | + |
| 49 | +**Changes to new 7.4 new features (compared to 7.4 RC1)** |
| 50 | +* [#13343](https://github.com/redis/redis/pull/13343) Hash - expiration of individual fields: when key does not exist - reply with an array (nonexisting code for each field) |
| 51 | +* [#13329](https://github.com/redis/redis/pull/13329) Hash - expiration of individual fields: new keyspace event: `hexpired` |
| 52 | + |
| 53 | +**Modules API - Potentially breaking changes to new 7.4 features (compared to 7.4 RC1)** |
| 54 | +* [#13326](https://github.com/redis/redis/pull/13326) Hash - expiration of individual fields: avoid lazy expire when called from a Modules API function |
| 55 | + |
| 56 | +## Redis Community Edition 7.4-rc1 (June 2024) |
| 57 | + |
| 58 | +Upgrade urgency LOW: This is the first Release Candidate for Redis Community Edition 7.4. |
| 59 | + |
| 60 | +Here is a comprehensive list of changes in this release compared to 7.2.5. |
| 61 | + |
| 62 | +**New Features** |
| 63 | +* [#13303](https://github.com/redis/redis/pull/13303) Hash - expiration of individual fields. 9 commands were introduced: |
| 64 | + - `HEXPIRE` and `HPEXPIRE` set the remaining time to live for specific fields |
| 65 | + - `HEXPIREAT` and `HPEXPIREAT` set the expiration time to a UNIX timestamp for specific fields |
| 66 | + - `HPERSIST` removes the expiration for specific fields |
| 67 | + - `HEXPIRETIME` and `HPEXPIRETIME` get the expiration time for specific fields |
| 68 | + - `HTTL` and `HPTTL` get the remaining time to live for specific fields |
| 69 | +* [#13117](https://github.com/redis/redis/pull/13117) `XREAD`: new id value `+` to start reading from the last message |
| 70 | +* [#12765](https://github.com/redis/redis/pull/12765) `HSCAN`: new `NOVALUES` flag to report only field names |
| 71 | +* [#12728](https://github.com/redis/redis/pull/12728) `SORT`, `SORT_RO`: allow `BY` and `GET` options in cluster mode when the pattern maps to the same slot as the key |
| 72 | +* [#12299](https://github.com/redis/redis/pull/12299) `CLIENT KILL`: new optional filter: `MAXAGE maxage` - kill connections older than `maxage` seconds |
| 73 | +* [#12971](https://github.com/redis/redis/pull/12971) Lua: expose `os.clock()` API for getting the elapsed time of Lua code execution |
| 74 | +* [#13276](https://github.com/redis/redis/pull/13276) Allow `SPUBLISH` command within `MULTI ... EXEC` transactions on replica |
| 75 | + |
| 76 | +**Bug fixes** |
| 77 | +* [#12898](https://github.com/redis/redis/pull/12898) `XREADGROUP`: fix entries-read inconsistency between master and replicas |
| 78 | +* [#13042](https://github.com/redis/redis/pull/13042) `SORT ... STORE`: fix created lists to respect list compression and packing configs |
| 79 | +* [#12817](https://github.com/redis/redis/pull/12817), [#12905](https://github.com/redis/redis/pull/12905) Fix race condition issues between the main thread and module threads |
| 80 | +* [#12577](https://github.com/redis/redis/pull/12577) Unsubscribe all clients from replica for shard channel if the master ownership changes |
| 81 | +* [#12622](https://github.com/redis/redis/pull/12622) `WAITAOF` could timeout or hang if used after a module command that propagated effects only to replicas and not to AOF |
| 82 | +* [#11734](https://github.com/redis/redis/pull/11734) `BITCOUNT` and `BITPOS` with nonexistent key and illegal arguments return an error, not 0 |
| 83 | +* [#12394](https://github.com/redis/redis/pull/12394) `BITCOUNT`: check for wrong argument before checking if key exists |
| 84 | +* [#12961](https://github.com/redis/redis/pull/12961) Allow execution of read-only transactions when out of memory |
| 85 | +* [#13274](https://github.com/redis/redis/pull/13274) Fix crash when a client performs ACL change that disconnects itself |
| 86 | +* [#13311](https://github.com/redis/redis/pull/13311) Cluster: Fix crash due to unblocking client during slot migration |
| 87 | + |
| 88 | +**Security improvements** |
| 89 | +* [#13108](https://github.com/redis/redis/pull/13108) Lua: LRU eviction for scripts generated with `EVAL` *** BEHAVIOR CHANGE *** |
| 90 | +* [#12961](https://github.com/redis/redis/pull/12961) Restrict the total request size of `MULTI ... EXEC` transactions |
| 91 | +* [#12860](https://github.com/redis/redis/pull/12860) Redact ACL username information and mark `*-key-file-pass configs` as sensitive |
| 92 | + |
| 93 | + |
| 94 | +**Performance and resource utilization improvements** |
| 95 | +* [#12838](https://github.com/redis/redis/pull/12838) Improve performance when many clients call `PUNSUBSCRIBE` / `SUNSUBSCRIBE` simultaneously |
| 96 | +* [#12627](https://github.com/redis/redis/pull/12627) Reduce lag when waking `WAITAOF` clients and there is not much traffic |
| 97 | +* [#12754](https://github.com/redis/redis/pull/12754) Optimize `KEYS` when pattern includes hashtag and implies a single slot |
| 98 | +* [#11695](https://github.com/redis/redis/pull/11695) Reduce memory and improve performance by replacing cluster metadata with slot specific dictionaries |
| 99 | +* [#13087](https://github.com/redis/redis/pull/13087) `SCRIPT FLUSH ASYNC` now does not block the main thread |
| 100 | +* [#12996](https://github.com/redis/redis/pull/12996) Active memory defragmentation efficiency improvements |
| 101 | +* [#12899](https://github.com/redis/redis/pull/12899) Improve performance of read/update operation during rehashing |
| 102 | +* [#12536](https://github.com/redis/redis/pull/12536) `SCAN ... MATCH`: Improve performance when the pattern implies cluster slot |
| 103 | +* [#12450](https://github.com/redis/redis/pull/12450) `ZRANGE ... LIMIT`: improved performance |
| 104 | + |
| 105 | + |
| 106 | +**Other general improvements** |
| 107 | +* [#13133](https://github.com/redis/redis/pull/13133) Lua: allocate VM code with jemalloc instead of libc and count it as used memory *** BEHAVIOR CHANGE *** |
| 108 | +* [#12171](https://github.com/redis/redis/pull/12171) `ACL LOAD`: do not disconnect all clients *** BEHAVIOR CHANGE *** |
| 109 | +* [#13020](https://github.com/redis/redis/pull/13020) Allow adjusting defrag configurations while active defragmentation is running |
| 110 | +* [#12949](https://github.com/redis/redis/pull/12949) Increase the accuracy of avg_ttl (the average keyspace keys TTL) |
| 111 | +* [#12977](https://github.com/redis/redis/pull/12977) Allow running `WAITAOF` in scripts |
| 112 | +* [#12782](https://github.com/redis/redis/pull/12782) Implement TCP Keep-Alives across most Unix-like systems |
| 113 | +* [#12707](https://github.com/redis/redis/pull/12707) Improved error codes when rejecting scripts in cluster mode |
| 114 | +* [#12596](https://github.com/redis/redis/pull/12596) Support `XREAD ... BLOCK` in scripts; rejected only if it ends up blocking |
| 115 | + |
| 116 | +**New metrics** |
| 117 | +* [#12849](https://github.com/redis/redis/pull/12849) `INFO`: `pubsub_clients` - number of clients in Pub/Sub mode |
| 118 | +* [#12966](https://github.com/redis/redis/pull/12966) `INFO`: `watching_clients` - number of clients that are watching keys |
| 119 | +* [#12966](https://github.com/redis/redis/pull/12966) `INFO`: `total_watched_keys` - number of watched keys |
| 120 | +* [#12476](https://github.com/redis/redis/pull/12476) `INFO`: `client_query_buffer_limit_disconnections` - count client input buffer OOM events |
| 121 | +* [#12476](https://github.com/redis/redis/pull/12476) `INFO`: `client_output_buffer_limit_disconnections` - count client output buffer OOM events |
| 122 | +* [#12996](https://github.com/redis/redis/pull/12996) `INFO`: `allocator_muzzy` - memory returned to the OS but still shows as RSS until the OS reclaims it |
| 123 | +* [#13108](https://github.com/redis/redis/pull/13108) `INFO`: `evicted_scripts` - number of evicted eval scripts. Users can check it to see if they are abusing EVAL |
| 124 | +* [#12996](https://github.com/redis/redis/pull/12996) `MEMORY STATS`: `allocator.muzzy` - memory returned to the OS but still shows as RSS until the OS reclaims it |
| 125 | +* [#12913](https://github.com/redis/redis/pull/12913) `INFO MEMORY` `mem_overhead_db_hashtable_rehashing` - memory resharding overhead (only the memory that will be released soon) |
| 126 | +* [#12913](https://github.com/redis/redis/pull/12913) `MEMORY STATS`: `overhead.db.hashtable.lut` - total overhead of dictionary buckets in databases |
| 127 | +* [#12913](https://github.com/redis/redis/pull/12913) `MEMORY STATS`: `overhead.db.hashtable.rehashing` - temporary memory overhead of database dictionaries currently being rehashed |
| 128 | +* [#12913](https://github.com/redis/redis/pull/12913) `MEMORY STATS`: `db.dict.rehashing.count` - number of top level dictionaries currently being rehashed |
| 129 | +* [#12966](https://github.com/redis/redis/pull/12966) `CLIENT LIST`: `watch` - number of keys each client is currently watching |
| 130 | + |
| 131 | +**Modules API** |
| 132 | +* [#12985](https://github.com/redis/redis/pull/12985) New API calls: `RM_TryCalloc` and `RM_TryRealloc` - allow modules to handle memory allocation failures gracefully |
| 133 | +* [#13069](https://github.com/redis/redis/pull/13069) New API call: `RM_ClusterKeySlot` - which slot a key will hash to |
| 134 | +* [#13069](https://github.com/redis/redis/pull/13069) New API call: `RM_ClusterCanonicalKeyNameInSlot` - get a consistent key that will map to a slot |
| 135 | +* [#12486](https://github.com/redis/redis/pull/12486) New API call: `RM_AddACLCategory` - allow modules to declare new ACL categories |
| 136 | + |
| 137 | + |
| 138 | +**Configuration parameters** |
| 139 | +* [#12178](https://github.com/redis/redis/pull/12178) New configuration parameters: `max-new-connections-per-cycle` and `max-new-tls-connections-per-cycle` to limit the number of new client connections per event-loop cycle |
| 140 | +* [#7351](https://github.com/redis/redis/pull/7351) Rename some CPU configuration parameters for style alignment. Added alias to the old names to avoid breaking change |
| 141 | + |
| 142 | +**CLI tools** |
| 143 | +* [#10609](https://github.com/redis/redis/pull/10609) redis-cli: new `-t <timeout>` argument: specify server connection timeout in seconds |
| 144 | +* [#11315](https://github.com/redis/redis/pull/11315) redis-cli: new `-4` and `-6` flags to prefer IPV4 or IPV6 on DNS lookup |
| 145 | +* [#12862](https://github.com/redis/redis/pull/12862) redis-cli: allows pressing up arrow to return any command (including sensitive commands which are still not persisted) |
| 146 | +* [#12543](https://github.com/redis/redis/pull/12543) redis-cli: add reverse history search (like Ctrl+R in terminals) |
| 147 | +* [#12826](https://github.com/redis/redis/pull/12826) redis-cli: add `--keystats` and `--keystats-samples` to combines `--memkeys` and `--bigkeys` with additional distribution data |
| 148 | +* [#12735](https://github.com/redis/redis/pull/12735) redis-cli: fix: `--bigkeys` and `--memkeys` now work on cluster replicas |
| 149 | +* [#9411](https://github.com/redis/redis/pull/9411) redis-benchmark: add support for binary strings |
| 150 | +* [#12986](https://github.com/redis/redis/pull/12986) redis-benchmark: fix: pick random slot for a node to distribute operation across slots |
0 commit comments