Redis Cloud changelog (March 2023)
New features, enhancements, and other changes added to Redis Cloud during March 2023.
This changelog lists new features, enhancements, and other changes added to Redis Cloud during March 2023.
New features and enhancements
Redis 7.0 preview
A preview of Redis 7.0 is available for Fixed subscriptions in selected regions in AWS and GCP. However, some Redis 7.0 functionality might not be fully available during preview. Redis 7.0 also introduces several changes to existing Redis commands; see the list of breaking changes for more details.
The following tables show which new open source Redis 7.0 commands are supported in Redis 7.0 subscriptions.
Cluster management commands
Command | Supported |
---|---|
CLUSTER ADDSLOTSRANGE | ❌ Not supported |
CLUSTER DELSLOTSRANGE | ❌ Not supported |
CLUSTER LINKS | ❌ Not supported |
CLUSTER SHARDS | ❌ Not supported |
Connection management commands
Command | Supported |
---|---|
CLIENT NO-EVICT | ❌ Not supported |
Data type commands
Data type | Command | Supported |
---|---|---|
List | BLMPOP | ✅ Supported |
List | LMPOP | ✅ Supported |
Set | SINTERCARD | ✅ Supported |
Sorted set | BZMPOP | ✅ Supported |
Sorted set | ZINTERCARD | ✅ Supported |
Sorted set | BZMPOP | ✅ Supported |
Keys (generic) commands
Command | Supported |
---|---|
EXPIRETIME | ✅ Supported |
PEXPIRETIME | ✅ Supported |
SORT_RO | ✅ Supported |
Pub/sub commands
Command | Supported |
---|---|
PUBSUB SHARDCHANNELS | ✅ Supported |
PUBSUB SHARDNUMSUB | ✅ Supported |
SPUBLISH | ❌ Not supported |
SSUBSCRIBE | ❌ Not supported |
SUNSUBSCRIBE | ❌ Not supported |
Scripting and function commands
Command | Supported |
---|---|
EVAL_RO | ❌ Not supported |
EVALSHA_RO | ❌ Not supported |
FUNCTION DELETE | ✅ Supported |
FUNCTION DUMP | ✅ Supported |
FUNCTION FLUSH | ✅ Supported |
FUNCTION HELP | ✅ Supported |
FUNCTION KILL | ✅ Supported |
FUNCTION LIST | ✅ Supported |
FUNCTION LOAD | ✅ Supported |
FUNCTION RESTORE | ✅ Supported |
FUNCTION STATS | ❌ Not supported |
Server management commands
Command | Supported |
---|---|
ACL DRYRUN | ❌ Not supported |
COMMAND DOCS | ✅ Supported |
COMMAND GETKEYSANDFLAGS | ✅ Supported |
COMMAND LIST | ✅ Supported |
MODULE LOADEX | ❌ Not supported |
LATENCY HISTOGRAM | ❌ Not supported |
Breaking changes
Redis 7.0 breaking changes
When new major versions of open source Redis change existing commands, upgrading your database to a new version can potentially break some functionality. Before you upgrade, make sure to read the provided list of breaking changes that affect Redis Enterprise and update any applications that connect to your database to handle these changes.
To check your Redis database version (redis_version
), you can use the admin console or run the INFO
command with redis-cli
:
$ redis-cli -p <port> INFO
"# Server
redis_version:7.0.8
..."
Open source Redis version 7.0 introduces the following potentially breaking changes to Redis Enterprise:
Programmability
-
Lua scripts no longer have access to the
print()
function (#10651) - Theprint
function was removed from Lua because it can potentially cause the Redis processes to get stuck (if no one reads from stdout). Users should use redis.log. An alternative is to override theprint
implementation and print the message to the log file. -
Block
PFCOUNT
andPUBLISH
in read-only scripts (*_RO commands,no-writes
) (#10744) - ConsiderPFCOUNT
andPUBLISH
as write commands in scripts, in addition toEVAL
; meaning:- They can never be used in scripts with shebang (
#!
) and nono-writes
flag - They are blocked in
EVAL_RO
and_RO
variants, (even in scripts without shebang (#!
) flags) - Allow
no-write
scripts in EVAL (not just in EVAL_RO), even duringCLIENT PAUSE WRITE
- They can never be used in scripts with shebang (
-
Hide the
may_replicate
flag from theCOMMAND
command response (#10744) - As part of the change to treatmay_replicate
commandsPFCOUNT
andPUBLISH
as write commands in scripts, in addition toEVAL
, themay_replicate
flag has been removed from theCOMMAND
response.
Error handling
-
Rephrased some error responses about invalid commands or arguments (#10612) -
- Error response for unknown command introduced a case change (
Unknown
tounknown
) - Errors for module commands extended to cover subcommands, updated syntax to match Redis Server syntax
- Arity errors for module commands introduce a case change (
Wrong
towrong
); will consider full command name
- Error response for unknown command introduced a case change (
-
Corrected error codes returned from
EVAL
scripts (#10218, #10329).These examples show changes in behavior:
1: config set maxmemory 1 2: +OK 3: eval "return redis.call('set','x','y')" 0 - 4: -ERR Error running script (call to 71e6319f97b0fe8bdfa1c5df3ce4489946dda479): @user_script:1: @user_script: 1: -OOM command not allowed when used memory > 'maxmemory'. + 4: -ERR Error running script (call to 71e6319f97b0fe8bdfa1c5df3ce4489946dda479): @user_script:1: OOM command not allowed when used memory > 'maxmemory'. 5: eval "return redis.pcall('set','x','y')" 0 - 6: -@user_script: 1: -OOM command not allowed when used memory > 'maxmemory'. + 6: -OOM command not allowed when used memory > 'maxmemory'. 7: eval "return redis.call('select',99)" 0 8: -ERR Error running script (call to 4ad5abfc50bbccb484223905f9a16f09cd043ba8): @user_script:1: ERR DB index is out of range 9: eval "return redis.pcall('select',99)" 0 10: -ERR DB index is out of range 11: eval_ro "return redis.call('set','x','y')" 0 -12: -ERR Error running script (call to 71e6319f97b0fe8bdfa1c5df3ce4489946dda479): @user_script:1: @user_script: 1: Write commands are not allowed from read-only scripts. +12: -ERR Error running script (call to 71e6319f97b0fe8bdfa1c5df3ce4489946dda479): @user_script:1: ERR Write commands are not allowed from read-only scripts. 13: eval_ro "return redis.pcall('set','x','y')" 0 -14: -@user_script: 1: Write commands are not allowed from read-only scripts. +14: -ERR Write commands are not allowed from read-only scripts.
-
ZPOPMIN
/ZPOPMAX
used to produce wrong replies when count is 0 with non-zset #9711):ZPOPMIN
/ZPOPMAX
used to produce an(empty array)
whenkey
was not a sorted set and the optionalcount
argument was set to0
and now produces aWRONGTYPE
error response instead.- The optional
count
argument must be positive. A negative value produces avalue is out of range
error.
These examples show changes in behavior:
1: zadd myzset 1 "one" 2: (integer) 1 3: zadd myzset 2 "two" 4: (integer) 1 5: zadd myzset 3 "three" 6: (integer) 1 7: zpopmin myzset -1 - 8: (empty array) + 8: (error) ERR value is out of range, must be positive 9: 127.0.0.1:6379> set foo bar 10: OK 11: zpopmin foo 0 -12: (empty array) +12: (error) WRONGTYPE Operation against a key holding the wrong kind of value
-
LPOP
/RPOP
with count against a nonexistent list returns a null array instead of(nil)
(#10095). This change was backported to 6.2. -
LPOP
/RPOP
used to produce(nil)
when count is 0, now produces a null array (#9692). This change was backported to 6.2. -
XCLAIM
/XAUTOCLAIM
skips deleted entries instead of replying withnil
and deletes them from the pending entry list (#10227) -XCLAIM
/XAUTOCLAIM
now behaves in the following way:- If you try to claim a deleted entry, it is deleted from the pending entry list (PEL) where it is found (as well as the group PEL). Therefore, such an entry is not claimed, just cleared from PEL (because it doesn't exist in the stream anyway).
- Because deleted entries are not claimed,
X[AUTO]CLAIM
does not return "nil" instead of an entry. - Added an array of all the deleted stream IDs to
XAUTOCLAIM
response.
ACLs
-
ACL GETUSER
reply now uses ACL syntax forkeys
andchannels
(#9974).ACL GETUSER
now uses the ACL DSL (Domain Specific Language) for keys and channels.These examples show changes in behavior:
1: acl setuser foo off resetchannels &channel1 -@all +get 2: OK 3: acl getuser foo 4: 1) "flags" 5: 2) 1) "off" 6: 3) "passwords" 7: 4) (empty array) 8: 5) "commands" 9: 6) "-@all +get" 10: 7) "keys" -11: 8) (empty array) +11: 8) "" 12: 9)"channels" -13 10) 1) "channel1" +13 10) "&channel1"
-
SORT
/SORT_RO
commands reject key access patterns inGET
andBY
if the ACL doesn't grant the command full keyspace access (#10340) - Thesort
andsort_ro
commands can access external keys viaGET
andBY
. In order to make sure the user cannot violate the authorization ACL rules, Redis 7 will reject external keys access patterns unless ACL allowsSORT
full access to all keys. For backwards compatibility,SORT
withGET
/BY
keeps working, but if ACL has restrictions to certain keys, the use of these features will result in a permission denied error.These examples show changes in behavior:
USER FOO (+sort ~* ~mylist) #FOO> sort mylist by w* get v* - is O.K since ~* provides full key access
USER FOO (+sort %R~* ~mylist) #FOO> sort mylist by w* get v* - is O.K since %R~* provides full key READ access**
USER FOO (+sort %W~* ~mylist) #FOO> sort mylist by w* get v* - will now fail since $W~* only provides full key WRITE access
USER FOO (+sort ~v* ~mylist) #FOO> sort mylist by w* get v* - will now fail since ~v* only provides partial key access
-
Fix ACL category for
SELECT
,WAIT
,ROLE
,LASTSAVE
,READONLY
,READWRITE
,ASKING
(#9208):SELECT
andWAIT
have been recategorized from@keyspace
to@connection
ROLE
,LASTSAVE
have been categorized as@admin
and@dangerous
ASKING
,READONLY
,READWRITE
have also been assigned the@connection
category and removed from@keyspace
- Command categories are explained in ACL documentation
Command introspection, stats, and configuration
-
COMMAND
reply dropsrandom
andsort-for-scripts
flags, which are now part of command tips (#10104) - Therandom
flag was replaced with thenondeterministic_output
tip; thesort-for-scripts
flag was replaced by thenondeterministic_output_order
tip -
INFO
commandstats
now shows the stats per sub-command (#9504) For example, while previous versions would provide a single entry for all command usage, in Redis 7, each sub command is reported separately:-
Redis 6.2:
cmdstat_acl:calls=4,usec=279,usec_per_call=69.75,rejected_calls=0,failed_calls=2
-
Redis 7:
cmdstat_acl|list:calls=1,usec=4994,usec_per_call=4994.00,rejected_calls=0,failed_calls=0 cmdstat_acl|setuser:calls=2,usec=16409,usec_per_call=8204.50,rejected_calls=0,failed_calls=0 cmdstat_acl|deluser:calls=1,usec=774,usec_per_call=774.00,rejected_calls=0,failed_calls=0 cmdstat_acl|getuser:calls=1,usec=6044,usec_per_call=6044.00,rejected_calls=0,failed_calls=0
-
-
CONFIG REWRITE
,CONFIG RESETSTAT
, and mostCONFIG SET
commands are now allowed during loading (#9878)
Deprecations
CLUSTER SLOTS
is deprecated as of Redis 7.0