Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

We’re showing branches in this repository, but you can also compare across forks.

base fork: antirez/redis
head fork: tsee/redis
Commits on Apr 04, 2012
Steffen Müller tsee Experimental support for on-expiration messaging for strings
With this change, the Redis server will dispatch a 0MQ message whenever
a key (of simple string type) expires. This is useful when using
Redis as a persistent, reliable hot cache and the data needs to be
expired into a cold storage solution.

0MQ was chosen for simplicity, low overhead and high message throughput
so that Redis isn't slowed down significantly.
Steffen Müller tsee Undo accidentally committed local change 260c319
Commits on Apr 05, 2012
Steffen Müller tsee Support for multiple 0MQ endpoints 7585ac0
Commits on Apr 10, 2012
Steffen Müller tsee Actually implement 0MQ HWM setting 0dc5127
Steffen Müller tsee Migrate remaining hobo logging to redisLog 8bfea87
Steffen Müller tsee Initialize 0MQ early in expectation of moving to bind() bac2c3b
Steffen Müller tsee Bind to the 0MQ endpoints and send PUSH messages
Used to be connect() and PUB, but it turns out that this being the
server, it's easier to write clients that deal with disappearing
Commits on Apr 20, 2012
Steffen Müller tsee The expiry client must nowadays connect 56b565b
Steffen Müller tsee Notice about 0MQ socket connections d504a41
Steffen Müller tsee Minor refactoring for future handling of other types
Includes a change to the expiry protocol that prepends an identifier for
the type.
Steffen Müller tsee Make private function static 916ab83
Steffen Müller tsee feeble attempts at dumping hashes c0ab96b
Commits on Apr 21, 2012
Steffen Müller tsee Use redis dumping facilities for writing to 0mq
This is using some code written by Lourens Naudé at
Steffen Müller tsee Hack towards dumping with simple protocol
1st frame: Header of dbno and value type
2nd frame: Key string
3rd frame: Value

A string is dumped as (size_t)length and length bytes of string.
The interpretation of the value depends on the value type, which
is either a string as per above, or a has encoded as:
  - (size_t)nhashkeys
  - nhashkeys alternating key/value pairs
    => key and value both being a string as per above

The hash dumping is not implemented yet.
Steffen Müller tsee Implement dumping ziplists
Moderately untested...
Steffen Müller tsee Implement dumping hashes...
... again, not well tested.
Steffen Müller tsee No need to write 8byte types on 64bit machines 133a130
Steffen Müller tsee expiry example dumper client for hash and string 227f335
Steffen Müller tsee Merge remote-tracking branch 'upstream/unstable' into msg_on_expire
Commits on Apr 24, 2012
Steffen Müller tsee 0MQ expiry message docs 4747c52
Commits on Apr 26, 2012
Steffen Müller tsee Fix hash/dict dumping to zmq socket
Needed a factor of two: key AND value for dicts
Commits on May 21, 2012
Steffen Müller tsee Make function static where possible 00df4ad
Steffen Müller tsee Fix strict aliasing violation 0e65fe7
Steffen Müller tsee First stab at implementing expire looping
In a nutshell, this feature will enable stuffing a hash back into Redis
when it expires, while resetting expiration and keeping track of how
often it has done the expire loop. Eventually, when that counter hits a
configurable limit, it won't be reinserted.

This is useful as a oh-my-god-is-this-painful workaround for both
unreliable messaging and the
this-key-is-in-flight-and-not-available-from-anywhere race condition.
The worker processes that pick up the expired messages are expected
to issue an explicit delete from Redis when they've successfully
inserted the record into the long term storage. That breaks the cycle.
Steffen Müller tsee Note the expire loop config in the example config 7682548
Commits on May 22, 2012
Steffen Müller tsee expire example script compile fixlet 2aaa5e6
Commits on May 23, 2012
Steffen Müller tsee Working expire loops f192bb0
Commits on Jun 03, 2012
Steffen Müller tsee More aggressive expiration 5823430
Something went wrong with that request. Please try again.