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
Exemple #2
0
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
Exemple #3
0
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")
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")
Exemple #5
0
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