diff --git a/redis/client.py b/redis/client.py index 160f495c1f..f61a35d686 100755 --- a/redis/client.py +++ b/redis/client.py @@ -3048,6 +3048,15 @@ def zrange(self, name, start, end, desc=False, withscores=False, } return self.execute_command(*pieces, **options) + def zrangestore(self, dest, name, start, end): + """ + Stores in ``dest`` the result of a range of values from sorted set + ``name`` between ``start`` and ``end`` sorted in ascending order. + + ``start`` and ``end`` can be negative, indicating the end of the range. + """ + return self.execute_command('ZRANGESTORE', dest, name, start, end) + def zrangebylex(self, name, min, max, start=None, num=None): """ Return the lexicographical range of values from sorted set ``name`` diff --git a/tests/test_commands.py b/tests/test_commands.py index 3f0a82f721..d32eb3832b 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -1588,6 +1588,16 @@ def test_zrange(self, r): assert r.zrange('a', 0, 1, withscores=True, score_cast_func=int) == \ [(b'a1', 1), (b'a2', 2)] + @skip_if_server_version_lt('6.2.0') + def test_zrangestore(self, r): + r.zadd('a', {'a1': 1, 'a2': 2, 'a3': 3}) + assert r.zrangestore('b', 'a', 0, 1) + assert r.zrange('b', 0, -1) == [b'a1', b'a2'] + assert r.zrangestore('b', 'a', 1, 2) + assert r.zrange('b', 0, -1) == [b'a2', b'a3'] + assert r.zrange('b', 0, -1, withscores=True) == \ + [(b'a2', 2), (b'a3', 3)] + @skip_if_server_version_lt('2.8.9') def test_zrangebylex(self, r): r.zadd('a', {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0})