antirez db3bbb9006 Draft #1 of a new expired keys collection algorithm.
The main idea here is that when we are no longer to expire keys at the
rate the are created, we can't block more in the normal expire cycle as
this would result in too big latency spikes.

For this reason the commit introduces a "fast" expire cycle that does
not run for more than 1 millisecond but is called in the beforeSleep()
hook of the event loop, so much more often, and with a frequency bound
to the frequency of executed commnads.

The fast expire cycle is only called when the standard expiration
algorithm runs out of time, that is, consumed more than
REDIS_EXPIRELOOKUPS_TIME_PERC of CPU in a given cycle without being able
to take the number of already expired keys that are yet not collected
to a number smaller than 25% of the number of keys.

You can test this commit with different loads, but a simple way is to
use the following:

Extreme load with pipelining:

redis-benchmark -r 100000000 -n 100000000  \
        -P 32 set ele:rand:000000000000 foo ex 2

Remove the -P32 in order to avoid the pipelining for a more real-world
load.

In another terminal tab you can monitor the Redis behavior with:

redis-cli -i 0.1 -r -1 info keyspace

and

redis-cli --latency-history

Note: this commit will make Redis printing a lot of debug messages, it
is not a good idea to use it in production.
2013-08-05 12:05:22 +02:00
..
2012-04-13 17:52:33 -07:00
2013-01-19 10:59:44 +01:00
2013-07-10 14:37:13 +02:00
2013-07-08 16:08:36 +02:00
2013-01-19 10:59:44 +01:00
2013-01-19 10:59:44 +01:00
2013-06-27 12:18:29 +02:00
2013-01-19 10:59:44 +01:00
2013-05-14 11:23:16 +02:00
2013-01-19 10:59:44 +01:00
2013-06-21 12:07:53 +02:00
2013-01-19 10:59:44 +01:00
2013-01-19 10:59:44 +01:00
2013-01-19 10:59:44 +01:00
2013-07-16 15:43:36 +02:00
2013-01-19 10:59:44 +01:00
2013-07-24 18:59:54 +02:00
2013-07-02 12:08:07 +02:00
2011-07-06 15:22:00 +02:00
2013-05-27 11:44:04 +02:00
2013-01-19 10:59:44 +01:00