博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python操作redis数据库
阅读量:6364 次
发布时间:2019-06-23

本文共 2826 字,大约阅读时间需要 9 分钟。

前言:这两天的事情不多,为了避免之前学习的一点点Python知识遗忘,我在Github上找了一些小项目跟着实践。之前的工作有写过相关的Python处理redis处理数据的脚本,但之前没有养成记录积累的习惯,所以~~~~(遗忘了),所以趁此机会学习一下Python操作redis。

安装:

# pip install redis >>> import redis >>> dir(redis) ['AuthenticationError', 'BlockingConnectionPool', 'BusyLoadingError', 'Connection', 'ConnectionError', 'ConnectionPool', 'DataError', 'InvalidResponse', 'PubSubError', 'ReadOnlyError', 'Redis', 'RedisError', 'ResponseError', 'SSLConnection', 'StrictRedis', 'TimeoutError', 'UnixDomainSocketConnection', 'VERSION', 'WatchError', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_compat', 'client', 'connection', 'exceptions', 'from_url', 'int_or_str', 'lock', 'selector', 'utils']

连接redis数据库:

>>> r = redis.Redis(host='192.168.1.115', port=6379, db=7, password=None, encoding='utf-8')      # 默认不支持按指定encoding解析返回值,需要指定 decode_responses=True >>> type(r) 
                # redis.client.Redis 对象为大部分的redis命令都实现了接口具体法可以参考对应的redis命令

Python使用连接池来管理redis连接,默认Python会为每一个redis连接创建一个连接池,可以使用 connection_pool 来指定连接池,以此来实现客户端分片或更精细的控制各个客户端的管理(这个概念尚不懂,哈哈)。

>>> pool = redis.ConnectionPool(host='192.168.1.115', port=6379, db=7)>>> r = redis.Redis(connection_pool=pool)

操作数据:

>>> r.dbsize()0>>> r.set('key1', 'value1')True>>> r.get('key1')b'value1'>>> r.get('key2')>>> for i in range(1000):...     key = 'key%s' % str(i)...     value = 'value{}'.format(str(i))...     r.set(key, value)...     >>> r.dbsize()1000>>> r.randomkey()b'key247'>>> r.get('key247')b'value247'>>> r.scan(0, 'key245*', 500)                 # *scan命令可以使用对应的*scan_iter,这样可以避免获取游标问题(1022, [b'key245'])>>> r.scan(1022, 'key245*', 500)(0, [])>>> r.delete('key1')                      # 由于del是Python的保留关键字,所有换为delete1>>> r.get('key1')

在Python2中默认返回的是str对象,但在Python3中所有返回都是bytes对象,需要自己把bytes解密成是str。

>>> value = r.get('key247')>>> type(value)
>>> value.decode(encoding='utf-8')'value247'

管道:管道可以多条命令以一个请求发送给redis服务器进行处理,可以显著的提高效率。

>>> pool = redis.ConnectionPool(host='192.168.1.115', port=6379, db=7, password=None)>>> r = redis.Redis(connection_pool=pool, decode_responses=True, encoding='utf-8')>>> r.set('bing', 'baz')True>>> pipe = r.pipeline(transaction=False)>>> pipe.set('foo1', 'bar1')Pipeline
>>>>> pipe.get('bing')Pipeline
>>>>> pipe.execute()[True, b'baz']                # True 为 pipe.set()返回, b'baz' 为pipe.get()返回

关于redis连接关闭问题:

看完整篇文档之后,我发现并没有提到redis连接的释放问题。我记得以前再Python2中使用在最后调用了 closed() 方法,于是查了一下网络资料,发现Python使用连接池来管理redis连接,无需主动关闭连接,连接对象被释放后对应的连接也会被关闭,按照以前调用 close() 方法其实也是没有作用的。

后话:我是根据   提供的redis模块官方文档来学习的,奈何学习redis知识不够,而且平常很少用到英语,这么一长篇英文文档看完注意力还是很难集中,后面的一部分内容就只能大概了解一下,以后如果机会再进行补全。

参考资料:

转载于:https://www.cnblogs.com/xingphimo/p/10831845.html

你可能感兴趣的文章
Count and Say leetcode
查看>>
简单易用的APP制作软件,KM盒子V6.3版发布
查看>>
Appium移动自动化测试之问题总结
查看>>
UIScrollView 大概是如何实现的,它是如何捕捉、响应手势的?
查看>>
wx-cli:简易微信小程序开发脚手架
查看>>
asp.net MVC中实现调取web api
查看>>
keepalived实现服务高可用
查看>>
iOS模型以及使用
查看>>
NSString 去除空格
查看>>
swift - 网络请求数据处理 - 协议处理
查看>>
[BZOJ1588]营业额统计(Splay)
查看>>
[BZOJ 4869][SHOI&SXOI2017]相逢是问候(扩展欧拉定理+线段树)
查看>>
2017-08-13
查看>>
条件语句优化面面观
查看>>
集成友盟微信登录没有回调
查看>>
在CentOS Linux系统上,添加新的端口,启用ssh服务
查看>>
dbcp数据库连接池简单使用
查看>>
leetcode-38-Count and Say
查看>>
从零开始写一个node爬虫(上)—— 数据采集篇
查看>>
java调用远程服务器shell脚本
查看>>