ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

python使用pipeline批量读写redis的方法

2022-07-05 22:01:01  阅读:175  来源: 互联网

标签:pipeline hash python redis Pipeline pipe key


1.插入数据

1. >>> import redis
2.  
3. >>> conn = redis.Redis(host='192.168.8.176',port=6379)
4.  
5. >>> pipe = conn.pipeline()
6.  
7. >>> pipe.hset("hash_key","leizhu900516",8)
8. Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>
9.  
10. >>> pipe.hset("hash_key","chenhuachao",9)
11. Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>
12.  
13. >>> pipe.hset("hash_key","wanger",10)
14. Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>
15.  
16. >>> pipe.execute()
17. [1L, 1L, 1L]
>>>

2.批量读取数据

1. &gt;>> pipe.hget("hash_key","leizhu900516")
2. Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>
3.  
4. >>> pipe.hget("hash_key","chenhuachao")
5. Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>
6.  
7. >>> pipe.hget("hash_key","wanger")
8. Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>
9.  
10. >>> result = pipe.execute()
11.  
12. >>> print result
13. ['8', '9', '10'] #有序的列表
14. >>>

3.###生产环境批量读写
总结:redis的pipeline就是这么简单,实际生产环境,
根据需要去编写相应的代码,思路同理。如下:

1. redis_db = redis.Redis(host='127.0.0.1',port=6379)
2. data = ['zhangsan', 'lisi', 'wangwu']
3.  
4. with redis_db.pipeline(transaction=False) as pipe:
5.      for i in data:
6.      pipe.zscore(self.key, i)
7.  
8.      result = pipe.execute()
9.  
10. print result
11. # [100, 80, 78]

线上的redis一般都是集群模式,集群模式下使用pipeline的时候,在创建pipeline的对象时,需要指定

pipe =conn.pipeline(transaction=False)

经过线上实测,利用pipeline取值3500条数据,大约需要900ms,如果配合线程or协程来使用,每秒返回1W数据是没有问题的,基本能满足大部分业务。

标签:pipeline,hash,python,redis,Pipeline,pipe,key
来源: https://www.cnblogs.com/gqv2009/p/16448791.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有