|
1
|
|
|
import redis |
|
2
|
|
|
|
|
3
|
|
|
class Cache: |
|
4
|
|
|
''' in memory cache''' |
|
5
|
|
|
__redis = None |
|
6
|
|
|
isonline = False |
|
7
|
|
|
def __init__(self, servicelogin): |
|
8
|
|
|
self.encoding = 'utf-8' |
|
9
|
|
|
self.__redis = redis.Redis(host=servicelogin.host, port=servicelogin.port, password=servicelogin.password) |
|
10
|
|
|
self.isonline = True |
|
11
|
|
|
def iskeyexists(self, key): |
|
12
|
|
|
'''true when key exists in cache''' |
|
13
|
|
|
return self.__redis.exists(key) |
|
14
|
|
|
def get(self, key): |
|
15
|
|
|
'''get value from key''' |
|
16
|
|
|
try: |
|
17
|
|
|
return self.__redis.get(key) |
|
18
|
|
|
except redis.exceptions.ConnectionError as ex: |
|
19
|
|
|
self.isonline = False |
|
20
|
|
|
raise ex |
|
21
|
|
|
def getlist(self, key): |
|
22
|
|
|
'''get a list from key''' |
|
23
|
|
|
return self.__redis.lrange(key, 0, -1) |
|
24
|
|
|
|
|
25
|
|
|
def put(self, key, value): |
|
26
|
|
|
'''store a value into key''' |
|
27
|
|
|
self.__redis.set(key, value) |
|
28
|
|
|
|
|
29
|
|
|
def putinhashset(self, name, key, value): |
|
30
|
|
|
'''store value into key at name''' |
|
31
|
|
|
if not isinstance(value, str): |
|
32
|
|
|
raise ValueError('hashset value must be a string') |
|
33
|
|
|
self.__redis.hset(name, key, value) |
|
34
|
|
|
|
|
35
|
|
|
def getfromhashset(self, name, key): |
|
36
|
|
|
'''get value in hashset''' |
|
37
|
|
|
return self.__redis.hget(name, key) |
|
38
|
|
|
|
|
39
|
|
|
def gethashset(self, name): |
|
40
|
|
|
'''this will return keys and values from hashset''' |
|
41
|
|
|
output = {} |
|
42
|
|
|
hashitems = self.__redis.hgetall(name) |
|
43
|
|
|
for key, value in hashitems.items(): |
|
44
|
|
|
output[key.decode(self.encoding)] = value.decode(self.encoding) |
|
45
|
|
|
return output |
|
46
|
|
|
def set(self, key, value): |
|
47
|
|
|
'''save value to cache key''' |
|
48
|
|
|
self.__redis.set(key, value) |
|
49
|
|
|
|
|
50
|
|
|
def delete(self, key): |
|
51
|
|
|
'''remove key''' |
|
52
|
|
|
self.__redis.delete(key) |
|
53
|
|
|
|
|
54
|
|
|
def hdel(self, name, key): |
|
55
|
|
|
'''remove key''' |
|
56
|
|
|
self.__redis.hdel(name, key) |
|
57
|
|
|
|
|
58
|
|
|
def purge(self): |
|
59
|
|
|
allkeys = self.__redis.scan_iter() |
|
60
|
|
|
for key in allkeys: |
|
61
|
|
|
self.delete(key) |
|
62
|
|
|
print("deleted key: {}".format(key)) |
|
63
|
|
|
|
|
64
|
|
|
def close(self): |
|
65
|
|
|
'''close the cache''' |
|
66
|
|
|
self.__redis = None |
|
67
|
|
|
|
|
68
|
|
|
class CacheKeys: |
|
69
|
|
|
'''all keys stored in cache''' |
|
70
|
|
|
knownminers = 'knownminers' |
|
71
|
|
|
knownpools = 'knownpools' |
|
72
|
|
|
knownsensors = 'knownsensors' |
|
73
|
|
|
#named pools, a big string. obsolete |
|
74
|
|
|
pools = 'pools' |
|
75
|
|
|
miners = 'miners' |
|
76
|
|
|
camera = 'camera' |
|
77
|
|
|
|
|
78
|
|
|
|