千家信息网

python实现redis客户端单例+hbase客户端单例

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,当业务需要大量去连接redis或者hbase的时候,大量的连接会造成socket的大量占用,导致的结果就是服务器没有更多的端口去分配,这种情况下的最好解决方案就是实现客户端连接的单例模式,保持连接永远
千家信息网最后更新 2026年10月31日python实现redis客户端单例+hbase客户端单例

当业务需要大量去连接redis或者hbase的时候,大量的连接会造成socket的大量占用,导致的结果就是服务器没有更多的端口去分配,这种情况下的最好解决方案就是实现客户端连接的单例模式,保持连接永远是同一个。说到这,可能大家没有经历过,如果在每秒钟插入4000条数据的话,这个现象就非常明显了。下面就实现下python实现操作redis+hbase单例模式,有很多改进之处,根据自己业务进行调整,可以通过打印实例的ID进行验证:

import happybaseimport redisclass _RedisMgrSingleton(type):    '''redis的单例'''    def __init__(self, name, bases, dict):        super(_RedisMgrSingleton, self).__init__(name, bases, dict)        self._instance = {}    def __call__(self, host,port,db):        if not self._instance.has_key((host,port,db)):            self._instance[(host,port,db)] = super(_RedisMgrSingleton, self).__call__(host,port,db)        return self._instance[(host,port,db )]class HbaseSingleton(type):    '''hbase的单例'''    def __init__(self, name, bases, dict):        super(HbaseSingleton, self).__init__(name, bases, dict)        self._instance = {}    def __call__(self, host,table):        if not self._instance.has_key((host,table)):            self._instance[(host,table)] = super(HbaseSingleton, self).__call__(host,table)        return self._instance[(host,table)]class RedisMgr:    "redis操作专用类"    def  __init__(self,host,port,db,max_connections=3):        "eg:  host    '192.168.2.184'   port  6379    db   14"        self.host=host        self.port=port        self.db=db        self.conn=redis.Redis(connection_pool= redis.ConnectionPool(host=host,port=port,db=db,max_connections=max_connections))    def run_redis_fun(self,funname,*args):        fun=getattr(self.conn,funname)        print args        return  fun(*args)    def pipe(self):        return self.conn.pipeline(transaction=False)    __metaclass__ = _RedisMgrSingleton      #元类实现单例class HbaseOperate(object):    def __init__(self,host,table):        self.host = host        self.table = table        self.conn = happybase.Connection(self.host)        self.table = self.conn.table(self.table)    def run(self,fun,*args):        # result =self.table.row(*args)        funname = getattr(self.table,fun)        return funname(*args)    def cells(self,column,info,version):        return self.table.cells(column,info,versions=version)    __metaclass__ = HbaseSingleton      #元类实现单例conn = HbaseOperate('xxx.xx.11.8',"history_visitor_product")result = conn.cells('chenhuachao','info:visiotr',3)print resultprint "第一次",id(conn)conn1 = HbaseOperate('xxx.xxx.11.8',"history_visitor_product")result1= conn1.cells('chenhuachao','info:visiotr',6)print result1print "第二次",id(conn1)#output['test10', 'test9', 'test97']第一次 38014896['test10', 'test9', 'test97', 'test17', 'test1345\n']第二次 38014896


业务 就是 模式 第一次 客户 客户端 明显 可以通过 实例 情况 数据 方案 时候 更多 最好 服务器 现象 端口 结果 解决方案 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大一互联网络科技有限公司 科技互联网龙头 互联网 科技公司 礼当家互联网科技 互联网科技论文 伴你行互联网科技有限公司 苏州大垚互联网科技 互联网科技美容 深圳互联网科技怎么样 山东吉时兔互联网科技有限公司 昭通云南众福互联网科技有限公司 佳云科技和互联网广告 港股科技和互联网 新兴科技互联网创新大赛颁奖典礼 国大互联网教育科技有限公司工作 南博望互联网科技有限公司 国大互联网教育科技有限公司薪资 神州科技互联网有限公司 普陀区互联网教育科技管理办法 互联网高科技绘画 互联网科技公司排名 上海互联网科技有限公司 朗涯互联网科技 互联网高科技企业 衡水科技产业互联网平台 恒银科技与互联网金融 贵州叶脉互联网科技有限公司所属行业 昊天互联网科技有限公司 呼和浩特新华互联网科技学院 皮皮虾互联网科技有限公司
0