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
断路器服务器模块
深圳偶滴网络技术有限公司
怎么看电脑服务器和数据库名称