diff --git a/redis/commands/core.py b/redis/commands/core.py index 464e8d8c85..d5ea82ff36 100644 --- a/redis/commands/core.py +++ b/redis/commands/core.py @@ -459,6 +459,7 @@ def client_kill_filter( skipme: Union[bool, None] = None, laddr: Union[bool, None] = None, user: str = None, + maxage: Union[int, None] = None, **kwargs, ) -> ResponseT: """ @@ -472,6 +473,7 @@ def client_kill_filter( options. If skipme is not provided, the server defaults to skipme=True :param laddr: Kills a client by its 'local (bind) address:port' :param user: Kills a client for a specific user name + :param maxage: Kills clients that are older than the specified age in seconds """ args = [] if _type is not None: @@ -494,6 +496,8 @@ def client_kill_filter( args.extend((b"LADDR", laddr)) if user is not None: args.extend((b"USER", user)) + if maxage is not None: + args.extend((b"MAXAGE", maxage)) if not args: raise DataError( "CLIENT KILL ... ... " diff --git a/tests/test_commands.py b/tests/test_commands.py index b2d7c1b9ed..1b5fe80e00 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -707,6 +707,15 @@ def test_client_kill_filter_by_user(self, r, request): assert c["user"] != killuser r.acl_deluser(killuser) + @skip_if_server_version_lt("7.4.0") + @skip_if_redis_enterprise() + def test_client_kill_filter_by_maxage(self, r, request): + _get_client(redis.Redis, request, flushdb=False) + time.sleep(4) + assert len(r.client_list()) == 2 + r.client_kill_filter(maxage=2) + assert len(r.client_list()) == 1 + @pytest.mark.onlynoncluster @skip_if_server_version_lt("2.9.50") @skip_if_redis_enterprise()