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安全错误
数据库的锁怎样保障安全
广东猪兼强互联网科技有限公司
科技金融是不是互联网金融
A股互联网金融科技公司
美国互联网科技
嘟嘟瓜互联网科技
唐信互联网科技
四川狮子座互联网科技
互联网科技股有哪些
顺网科技2021年互联网排名
昭通云南众福互联网科技有限公司
科技互联网大厂
深圳育鹏互联网科技有限公司招聘
银川新华互联网科技学校联系电话
想开互联网科技公司怎么样
互联网时代的科技公司
广东工业互联网大赛深圳学泰科技
互联网领先科技宣传片
互联网硬科技公司
互联网高科技行业有哪些企业
小牛互联网科技有限公司地址
互联网医疗科技
科技服务与互联网
北京互联网络科技有限公司
天扬科技互联网广告
哈尔滨新华互联网科技
西藏七维空间互联网科技有限公司
互联网科技寓意
乌鲁木齐新华智原互联网科技学校
美国互联网科技公司
互联网与数字科技关系