class RedisOrderedDict (collections.MutableMapping): def __ init__ ( self , r, name): self ._ r = r self ._name = encode_key (name) def __ iter __ ( self ): return iter ( self . items ()) def __ len __ ( self ): return self ._r.zcard ( self ._ name) def __ getitem __ ( self , key): return self ._ r.zscore ( self . _name, encode_key (key)) def __ setitem __ ( self , key, score): self ._r.zadd ( self ._ name, encode_key (key), score) def __ delitem __ ( self , key): self ._ r.zrem ( self ._ name, e ncode_key (key)) def keys ( self , start = 0 , end = - 1 ): # we use zrevrange to sort keys # by value instead of lowest return self ._ r.zrevrange ( self ._ name, start, end) def values ( self , start = 0 , end = - 1 ): return [v for (k, v) in self . items (start = start, end = end)] def items ( self , start = 0 , end = - 1 ): return self ._ r.zrevrange ( self ._ name, start, end, withscores = True ) def get ( self , key, default = 0 ): return self [key] or default def iteritems ( self ): return iter ( self ) def clear ( self ): self ._ r.delete ( self ._ name) |