1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 from redis.client import Redis as RedisClient
35 import logging
36 from memtools.protocols import Memory, MemoryPool
37 from memtools.storages import NotSet, OutOfBounds
38
39 try:
40 from cPickle import dumps, loads
41 except ImportError:
42 from pickle import dumps, loads
43
44
46 """
47 Memory gateway to a Redis server
48 """
49
50 - def __init__(self, expire=None, debug=False,
51 *args, **kwargs):
52 """
53 :param servers: List of servers to use. Please, read
54 redis.Redis help.
55
56 """
57 self._client = RedisClient(*args, **kwargs)
58 self._expire = expire
59 logging.basicConfig(level=logging.WARNING)
60 self.log = logging.getLogger("Redis-Gateway")
61 if debug:
62 self.log.setLevel(logging.DEBUG)
63
65 self.log.debug("Accessing key %s", key)
66 value = self._client.get(key)
67 if value:
68 value = loads(str(value))
69 if isinstance(value, NotSet):
70 return None
71 elif value is None:
72 raise KeyError
73 else:
74 self.log.debug("Key %s returned %s", key, value)
75 return value
76
78 self.log.debug("Setting key %s to %s", key, value)
79 if value is None:
80 value = NotSet()
81 self._client.set(key, dumps(value))
82 if self._expire:
83 self._client.expire(key, self._expire)
84
86 self.log.debug("Deleting key %s", key)
87 if self._client.delete(key) == 0:
88 raise KeyError
89
91 self.log.debug("Setting expire time to %s seconds for key %s",
92 time, key)
93 self._client.expire(key, time)
94
96 redis_attr = getattr(self._client, attr)
97 return redis_attr
98