diff options
author | Itamar Haber <itamar@redislabs.com> | 2018-10-15 21:24:31 +0300 |
---|---|---|
committer | Roey Prat <roey.prat@redislabs.com> | 2018-10-28 12:12:54 +0200 |
commit | f5f9bef17dabcacd3efdd9229af6fe9701628788 (patch) | |
tree | 0413f2137293d6ae64baf8fd9b892f75f14729bc | |
parent | 2a15e07f1a8aec26d287ec31ed330f598a1fca00 (diff) | |
download | redis-py-f5f9bef17dabcacd3efdd9229af6fe9701628788.tar.gz |
Implements XTRIM
-rwxr-xr-x | redis/client.py | 15 | ||||
-rw-r--r-- | tests/test_commands.py | 16 |
2 files changed, 30 insertions, 1 deletions
diff --git a/redis/client.py b/redis/client.py index 45b9879..136f36d 100755 --- a/redis/client.py +++ b/redis/client.py @@ -433,7 +433,7 @@ class StrictRedis(object): 'XINFO GROUPS': parse_xinfo_list }, string_keys_to_dict( - 'XACK XDEL', + 'XACK XDEL XTRIM', int ), string_keys_to_dict( @@ -1973,6 +1973,19 @@ class StrictRedis(object): """ return self.execute_command('XDEL', name, *ids) + def xtrim(self, name, maxlen, approximate=True): + """ + Trims old messages from a stream. + name: name of the stream. + maxlen: truncate old stream messages beyond this size + approximate: actual stream length may be slightly more than maxlen + """ + pieces = ['MAXLEN'] + if approximate: + pieces.append('~') + pieces.append(maxlen) + return self.execute_command('XTRIM', name, *pieces) + # SORTED SET COMMANDS def zadd(self, name, *args, **kwargs): """ diff --git a/tests/test_commands.py b/tests/test_commands.py index ab9c9c9..997d928 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -1756,6 +1756,22 @@ class TestStrictCommands(object): assert sr.xdel(stream_name, 1, stamp) == 1 assert sr.xdel(stream_name, 1, stamp, 42) == 0 + @skip_if_server_version_lt('5.0.0') + def test_strict_xtrim(self, sr): + stream_name = 'xtrim_test_stream' + sr.delete(stream_name) + + assert sr.xtrim(stream_name, 1000) == 0 + + for i in range(300): + sr.xadd(stream_name, index=i) + + assert sr.xtrim(stream_name, 1000, approximate=False) == 0 + assert sr.xtrim(stream_name, 300) == 0 + assert sr.xtrim(stream_name, 299) == 0 + assert sr.xtrim(stream_name, 234) == 0 + assert sr.xtrim(stream_name, 234, approximate=False) == 66 + def test_strict_zadd(self, sr): sr.zadd('a', 1.0, 'a1', 2.0, 'a2', a3=3.0) assert sr.zrange('a', 0, -1, withscores=True) == \ |