栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python连接redis/codis

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python连接redis/codis

在我们的模型部署实时预测的时候,需要通过redis拿取实时数据。所以需要对redis进行连接与get操作。

依赖
pip install redis
pip install kazoo
一. 直连示例
class redisDB:
    """
    https://www.runoob.com/w3cnote/python-redis-intro.html
    """
    def __init__(self, connect_dict):
        self.r = redis.StrictRedis(**connect_dict)

    def set(self, k, v):
        self.r.set(k, v)

    def get(self, k):
        return self.r.get(k).decode('utf-8')

    def hmget(self, k, *filed):
        return [i.decode('utf-8') if i is not None else i for i in self.r.hmget(k, *filed)]

    def hmset(self, k, f_dict):
        for field, v in f_dict.items():
            self.r.hset(k, field, v)

二、通过zk代理连接

主要步骤如下:

  • 连接zk: 通过KazooClient("host:port;host:port")连接
  • 通过zk.get_children方法获取proxy
    • codis_children = [i for i in self.zk.get_children('/') if 'codis' in i][0] 这部分也可以询问DBA同学确定
    • 【注:】一般有多个proxy,所以抽取一个
  • 通过get方法获取代理
    • 通过get获取: zk.get(proxy路径 )
    • 解析get后的json 获取代理的host:port
  • 连接并返回redis实例
    • 和 一 中的方法一致
class zkCodis:
    def __init__(self, zk_codis_config: dict):
        """
        params zk_codis_config: {
            "name": "codis-name",
            "passwd": "codis-passwad",
            "zkServer": "host:port;host:port",
            "timeout": 5*60
            }
        """
        self.zk_codis_config = zk_codis_config
        self.zk = KazooClient(zk_codis_config['zkServer'], randomize_hosts=True, timeout=zk_codis_config['timeout'])
        self.zk.start()
        self.proxy_url = self.__get_codis_proxy_url()
        self.codis_connect_config = None

    def __get_codis_proxy_url(self):
        codis_children = [i for i in self.zk.get_children('/') if 'codis' in i][0]
        uri = codis_children + '/' + self.zk_codis_config['name'] + '/proxy'
        proxy_list = self.zk.get_children(uri)
        proxy_url = uri + '/' + random.choice(proxy_list)
        return proxy_url

    def _get_codis_config(self):
        return json.loads(self.zk.get(self.proxy_url)[0].decode('utf-8'))

    def connect_codis(self):
        # 通过zk获取proxy
        self.proxy_url = self.__get_codis_proxy_url()
        # 通过get方法获取代理 host:port
        codis_info = self._get_codis_config()
        host_c, port_c = codis_info['proxy_addr'].split(':')
        username_c = self.zk_codis_config['name']
        password_c = self.zk_codis_config['passwd']
        codis_connect_config = dict(
            host=host_c, port=int(port_c), username=username_c, password=password_c
        )
        self.codis_connect_config = codis_connect_config
        # 连接并返回redis实例
        rds = redisDB(codis_connect_config)
        addr_ = codis_info['proxy_addr']
        name_ = self.zk_codis_config['name']
        print(f"Connect To {addr_} Codis-{name_}")
        return rds

# 示例
zk_codis = zkCodis(zk_codis_config=codis_config)
rds = zk_codis.connect_codis()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965775.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号