]> git.saurik.com Git - redis.git/commit - src/redis.c
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:56 +0000 (11:55 +0200)
commitdd94771578ca196db564ab3f51ae6ce6b185531c
tree238f2beaf23b3aee6c19e9acc79ba984e9349f4e
parent8b6b1b27cc0e21a92c419c860f245e344c4f7080
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