def test_keyslot(): """ Test that method will compute correct key in all supported cases """ n = NodeManager([{}]) assert n.keyslot("foo") == 12182 assert n.keyslot("{foo}bar") == 12182 assert n.keyslot("{foo}") == 12182 assert n.keyslot(1337) == 4314
def test_keyslot(): """ Test that method will compute correct key in all supported cases """ n = NodeManager([{}]) assert n.keyslot("foo") == 12182 assert n.keyslot("{foo}bar") == 12182 assert n.keyslot("{foo}") == 12182 assert n.keyslot(1337) == 4314 assert n.keyslot(125) == n.keyslot(b"125") assert n.keyslot(125) == n.keyslot("\x31\x32\x35") assert n.keyslot("大奖") == n.keyslot(b"\xe5\xa4\xa7\xe5\xa5\x96") assert n.keyslot(u"大奖") == n.keyslot(b"\xe5\xa4\xa7\xe5\xa5\x96") assert n.keyslot(1337.1234) == n.keyslot("1337.1234") assert n.keyslot(1337) == n.keyslot("1337") assert n.keyslot(b"abc") == n.keyslot("abc") assert n.keyslot("abc") == n.keyslot(unicode("abc")) assert n.keyslot(unicode("abc")) == n.keyslot(b"abc")
class RedisCluster(object): """RedisCluster""" def __init__(self, startup_nodes): self.nodemanager = NodeManager(startup_nodes=startup_nodes) self.nodemanager.initialize() self.redis_worker = {} for node, config in self.nodemanager.nodes.items(): rdp = BlockingConnectionPool(host=config["host"], port=config["port"]) self.redis_worker[node] = { "worker": StrictRedis(connection_pool=rdp, decode_responses=False), "type": config["server_type"] } def get(self, key): """get""" slot = self.nodemanager.keyslot(key) node = np.random.choice(self.nodemanager.slots[slot]) worker = self.redis_worker[node['name']] if worker["type"] == "slave": worker["worker"].execute_command("READONLY") return worker["worker"].get(key) def hmget(self, key, fields): """hmget""" while True: retry = 0 try: slot = self.nodemanager.keyslot(key) node = np.random.choice(self.nodemanager.slots[slot]) worker = self.redis_worker[node['name']] if worker["type"] == "slave": worker["worker"].execute_command("READONLY") ret = worker["worker"].hmget(key, fields) break except Exception as e: retry += 1 if retry > 5: raise e print("RETRY hmget after 1 sec. Retry Time %s" % retry) time.sleep(1) return ret def hmget_sample(self, key, fields, sample): """hmget_sample""" while True: retry = 0 try: slot = self.nodemanager.keyslot(key) node = np.random.choice(self.nodemanager.slots[slot]) worker = self.redis_worker[node['name']] if worker["type"] == "slave": worker["worker"].execute_command("READONLY") func = worker["worker"].register_script(LUA_SCRIPT) ret = func(keys=[key], args=[np.random.randint(4294967295), sample] + fields) break except Exception as e: retry += 1 if retry > 5: raise e print("RETRY hmget_sample after 1 sec. Retry Time %s" % retry) time.sleep(1) return ret