I think this won't work because Redis' sorted set only allow members with different values. In this case the value mutations could be the same.
class TimeStore:
def __init__(self, redis_client):
self.redis_client = redis_client
@staticmethod
def timestamp(time): return (time-datetime.datetime(1970,1,1)).total_seconds()
def set_value(self, key, value, time=None):
if time is None: time = datetime.datetime.utcnow()
timestamp = self.timestamp(time)
self.redis_client.zadd(key, timestamp, '%d:%s' % (timestamp, value))
def get_value(self, key, time=None):
if time is None: time = datetime.datetime.utcnow()
for item in self.redis_client.zrevrangebyscore(key, self.timestamp(time), 0, start=0, num=1):
return item.partition(':')[2]
return None
def cleanup_before(self, key, time):
self.redis_client.zremrangebyscore(key, 0, self.timestamp(time))