summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xredis/client.py16
-rw-r--r--tests/test_commands.py11
2 files changed, 27 insertions, 0 deletions
diff --git a/redis/client.py b/redis/client.py
index 902ccc9..6e4c9ab 100755
--- a/redis/client.py
+++ b/redis/client.py
@@ -1661,6 +1661,22 @@ class StrictRedis(object):
pieces.extend([Token('LIMIT'), start, num])
return self.execute_command(*pieces)
+ def zrevrangebylex(self, name, upper, lower, start=None, num=None):
+ """
+ Return the reversed lexicographical range of values from sorted set
+ ``name`` between ``upper`` and ``lower``.
+
+ If ``start`` and ``num`` are specified, then return a slice of the
+ range.
+ """
+ if (start is not None and num is None) or \
+ (num is not None and start is None):
+ raise RedisError("``start`` and ``num`` must both be specified")
+ pieces = ['ZREVRANGEBYLEX', name, upper, lower]
+ if start is not None and num is not None:
+ pieces.extend([Token('LIMIT'), start, num])
+ return self.execute_command(*pieces)
+
def zrangebyscore(self, name, min, max, start=None, num=None,
withscores=False, score_cast_func=float):
"""
diff --git a/tests/test_commands.py b/tests/test_commands.py
index c0e56b0..45206b2 100644
--- a/tests/test_commands.py
+++ b/tests/test_commands.py
@@ -959,6 +959,17 @@ class TestRedisCommands(object):
assert r.zrangebylex('a', '[f', '+') == [b('f'), b('g')]
assert r.zrangebylex('a', '-', '+', start=3, num=2) == [b('d'), b('e')]
+ @skip_if_server_version_lt('2.9.9')
+ def test_zrevrangebylex(self, r):
+ r.zadd('a', a=0, b=0, c=0, d=0, e=0, f=0, g=0)
+ assert r.zrevrangebylex('a', '[c', '-') == [b('c'), b('b'), b('a')]
+ assert r.zrevrangebylex('a', '(c', '-') == [b('b'), b('a')]
+ assert r.zrevrangebylex('a', '(g', '[aaa') == \
+ [b('f'), b('e'), b('d'), b('c'), b('b')]
+ assert r.zrevrangebylex('a', '+', '[f') == [b('g'), b('f')]
+ assert r.zrevrangebylex('a', '+', '-', start=3, num=2) == \
+ [b('d'), b('c')]
+
def test_zrangebyscore(self, r):
r.zadd('a', a1=1, a2=2, a3=3, a4=4, a5=5)
assert r.zrangebyscore('a', 2, 4) == [b('a2'), b('a3'), b('a4')]