]> git.saurik.com Git - redis.git/commit
Added the SRANDMEMBER key <count> variant.
authorantirez <antirez@gmail.com>
Wed, 19 Sep 2012 19:29:40 +0000 (21:29 +0200)
committerantirez <antirez@gmail.com>
Fri, 21 Sep 2012 09:55:28 +0000 (11:55 +0200)
commitbe90c803e3bb041335ea0b8f40348965846f06b7
treecbba469544bd0b33badffadf4f131847c832bcd5
parentd310fbedabd3101505b694f5c25a2e48480a3c2b
Added the SRANDMEMBER key <count> variant.

SRANDMEMBER called with just the key argument can just return a single
random element from a Redis Set. However many users need to return
multiple unique elements from a Set, this is not a trivial problem to
handle in the client side, and for truly good performance a C
implementation was required.

After many requests for this feature it was finally implemented.

The problem implementing this command is the strategy to follow when
the number of elements the user asks for is near to the number of
elements that are already inside the set. In this case asking random
elements to the dictionary API, and trying to add it to a temporary set,
may result into an extremely poor performance, as most add operations
will be wasted on duplicated elements.

For this reason this implementation uses a different strategy in this
case: the Set is copied, and random elements are returned to reach the
specified count.

The code actually uses 4 different algorithms optimized for the
different cases.

If the count is negative, the command changes behavior and allows for
duplicated elements in the returned subset.
src/redis.c
src/t_set.c