]> git.saurik.com Git - redis.git/commit
Blocking POP: use a dictionary to store keys clinet side.
authorantirez <antirez@gmail.com>
Sun, 2 Dec 2012 19:36:18 +0000 (20:36 +0100)
committerantirez <antirez@gmail.com>
Sun, 2 Dec 2012 19:43:15 +0000 (20:43 +0100)
commit2f87cf8b0162bd9d78c3a89860c0971cd71d39db
tree7c4bd472422ced8e3e605d165b6b59142f6fff86
parentc135b856c664f12b0fa3197df603db3039fe92c2
Blocking POP: use a dictionary to store keys clinet side.

To store the keys we block for during a blocking pop operation, in the
case the client is blocked for more data to arrive, we used a simple
linear array of redis objects, in the blockingState structure:

    robj **keys;
    int count;

However in order to fix issue #801 we also use a dictionary in order to
avoid to end in the blocked clients queue for the same key multiple
times with the same client.

The dictionary was only temporary, just to avoid duplicates, but since
we create / destroy it there is no point in doing this duplicated work,
so this commit simply use a dictionary as the main structure to store
the keys we are blocked for. So instead of the previous fields we now
just have:

    dict *keys;

This simplifies the code and reduces the work done by the server during
a blocking POP operation.
src/networking.c
src/redis.h
src/t_list.c