千家信息网

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

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,当业务需要大量去连接redis或者hbase的时候,大量的连接会造成socket的大量占用,导致的结果就是服务器没有更多的端口去分配,这种情况下的最好解决方案就是实现客户端连接的单例模式,保持连接永远
千家信息网最后更新 2025年01月19日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安全错误 数据库的锁怎样保障安全 互联网教育科技大会 软件开发中sow 重庆企业报修管理软件开发 未来教育数据库技术题库 泰州金盾软件开发公司 云服务器与本地服务器性能转换 国外化学知名数据库 网络安全基础 英文答案 吴忠网络技术推荐厂家 服务器启动速度加快 网络安全需要哪些东西 专业的网络安全 淮安定制软件开发价格 数据库中映射是什么 意思 数据库建立学生表有信息 2019北京网络安全大会游戏 深圳偶滴网络技术有限公司 计算机网络技术笔记本电脑轻薄 网络安全规划岗位职责风险 邮箱服务器默认端口 管家婆 数据库 恢复 小米路由器 网络安全密钥 方舟服务器怎么开管理员 网络安全法处罚或以正式文件通报 deform数据库没有数据 网络安全渗透技术的过程报告 网络技术302 断路器服务器模块 深圳偶滴网络技术有限公司 怎么看电脑服务器和数据库名称
0