iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python redis模块
  • 268
分享到

python redis模块

模块pythonredis 2023-01-31 06:01:53 268人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

  Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)

  Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

  python也提供的操作redis的模块。通过这个模块我们就可以向redis中写入和获取数据了。

看一个简单的插入和查询数据的代码。

#!/usr/bin/env Python
# -*-coding:utf-8-*-
import redis
#创建一个Redis方法实例,指定redis服务所在的地址和端口
r = redis.Redis(host='192.168.10.105', port=6379)
"""
通过set()方法向redis中写入数据,因为redis存储是k-v类型的字典模式
所以下面的的代码相当于向redis中写入一个字典{'foo':'Bar'}
"""
r.set('foo', 'Bar')
#通过get()方法从redis中key值'foo'对应的value值
print r.get('foo')

运行结果如下

Bar


连接池

  先说一下线程池(进程池)与连接池的区别。按我的理解,线程池(进程池)是限制执行一个任务的时候最多可以启动多少个线程(进程),一条线程(进程)处理完任务就消亡掉了。随后马上再创建一条新的线程(进程)到队列里获取任务执行再消亡。这样周而复始的运作。线程(进程)池只是限制一下同时存在的线程(进程)数量上限而已。这个方式的好处是不用预留大量线程等待连接,避免占用资源。缺点就是需要反复创建和销毁线程,这个过程开销也很大。

  连接池里面跑的都是线程。这些线程用来连接应用和数据库。每个连接池只要启动就会最少产生n个线程用于等待连接。当应用的连接数大于现有的线程数时,就产生新的线程应对连接请求。但是当达到预设上线的时候就不再产生新线程,其他请求只能等着有空余线程之后直接再连上。这样在繁忙的时候线程只会产生和等待不会消亡。当业务高峰过去。没每断开一个连接就会消亡掉一个线程。知道线程降低到最小线程数n的时候,线程数量就不会继续消亡了。这种方式的好处是不用反复创建新的线程增加创建开销。但是一启动就需要创建很多线程等着连接。时间久了也会对资源过度占用。

  redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。看代码:

import redis
"""
调用ConnectionPool()方法创建一个连接池实例,这里不管指定了redis服务器的ip和port还可以指定连接池
的最大连接数。如果不指定的话就是按系统的最大连接数取值(具体是什么有时候需要好好看看源码的解释)
"""
pool = redis.ConnectionPool(host='192.168.10.105', port=6379,max_connections=10)
"""
实例化redis的api的时候填入的参数变为刚刚定义的连接池
"""
r = redis.Redis(connection_pool=pool)
r.set('foo', 'Bar')
print r.get('foo')

执行结果和调用的普通的方法没什么区别,只是用了连接池之后最多只能有10个这样的set操作连接到redis服务器

Bar

管道

  我们上面的命令都是一次执行一个set操作,每次set都会连接一次数据库。如果set的量比较大,操作有比较密集的话就可以使用pipline管道操作。这个方法的作用就是把set这类的针对redis的操作都放入管道中,最后统一执行一次。这样的好处就是一次连接执行多条命令,减少与redis的连接次数。看代码

#!/usr/bin/env python
# -*-coding:utf-8-
import redis
"""
调用ConnectionPool()方法创建一个连接池实例,这里不管指定了redis服务器的ip和port还可以指定连接池
的最大连接数。如果不指定的话就是按系统的最大连接数取值(具体是什么有时候需要好好看看源码的解释)
"""
pool = redis.ConnectionPool(host='192.168.10.105', port=6379,max_connections=10)
r = redis.Redis(connection_pool=pool)
"""
默认情况下,向redis中set一次数据就叫一次原子性的操作。说白了就是事物操作如果set成功就没事了,如果不
成功就把插入的数据回退。非原子性的操作就是不管成功与否都继续进行也没有回退的数据。是否启用原子性操作
就通过transaction关键字来设置
"""
# pipe = r.pipeline(transaction=False)
#创建一个管道实例
pipe = r.pipeline(transaction=True)
#管道下面插入要执行的语句
r.set('name', 'alex')
r.set('role', 'sb')
#执行通道里的所有命令
pipe.execute()

 

redis订阅和发布。

 redis有个很有用的功能,它的原理就像个收音机一样。一个订阅者就相当于听众,一个发布者类似于主播。redis就是个广播电台。主播(发布者)通过电台(redis)传达给听众(订阅者)。另外要说明一下的就是主播和听众不是一对多,而是多对多的关系。可以多个主播多个听众的。下面通过代码来实现一下。

先来把电台这边的搭建好

#!/usr/bin/env python
# coding:utf-8
import redis
r=redis.Redis(host='192.168.10.105',port=6379)
#就这么简单,两句话。向指定的频道发送消息
r.publish('wgw_channel','hello everyone')


下面写个听众这一端的代码

#!/usr/bin/env python
# -*-coding:utf-8-*-
import redis
r=redis.Redis(host='192.168.10.105',port=6379)
#打开收音机电源
sub=r.pubsub()
#调整收音机的接收频率,两边的频率必须一样,不然就收不到了。
sub.subscribe('wgw_channel')
#调整好了就循环接受接收电台的信号,播放出来
while True:
    print sub.parse_response()

客户端运行起来之后会收到如下的运行结果

D:\Python27\python.exe F:/python_file/day12/test.py

#这一行第一次运行的时候肯定会出现,这个相当于频道的一个启动提示

['subscribe', 'wgw_channel', 1L]

#这里开始就是接收到的从电台主播那里发送过来的消息了

['message', 'wgw_channel', 'hello everyone']















  

















--结束END--

本文标题: python redis模块

本文链接: https://www.lsjlt.com/news/190267.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python redis模块
      redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)...
    99+
    2023-01-31
    模块 python redis
  • 【python】redis模块
    单线程,通过epoll实现高并发,端口6379linux下载地址:http://redis.io/downloadwindows下载地址:https://github.com/MSOpenTech/redis/releases 本文介绍的内...
    99+
    2023-01-31
    模块 python redis
  • Python模块:time模块
    time模块:python中处理时间的基础模块,有时间戳,元组,自定义,三种时间表现形式。python中时间戳的值是以1970年1月1日0点开始计算的,单位是秒。时间戳:就是两个时间差的数值。时区:传说中在开发服务器/客户端程序时,时区不一...
    99+
    2023-01-31
    模块 Python time
  • python模块:smtplib模块
    1.使用本地的sendmail协议进行邮件发送格式(1):smtpObj=smtplib.SMTP([host [,port [,local_hostname]]])host:SMTP服务器主机的IP地址或者是域名port:服务的端口号(默...
    99+
    2023-01-31
    模块 python smtplib
  • Python redis模块的使用教程指南
    目录1.安装模块2.连接池3.Redis 基本命令 String4.redis 基本命令 hash5.redis基本命令 list6.redis基本命令 set7.其他常用操作8.管道1.安装模块 python 要使用 ...
    99+
    2024-04-02
  • Python redis模块的使用教程指南
    目录1.安装模块2.连接池3.redis 基本命令 String4.redis 基本命令 hash5.redis基本命令 list6.redis基本命令 set7.其他常用操作8.管...
    99+
    2024-04-02
  • python怎么使用redis模块来跟redis实现交互
    本篇内容主要讲解“python怎么使用redis模块来跟redis实现交互”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python怎么使用redis模块来跟redis实现交互”吧!redis模...
    99+
    2023-07-02
  • 使用Python模块:struct模块
    Python没有提供直接的将用户定义的数据类型和文件IO关联起来的功能,但是它提供了struct库(是一个内置库)——我们可以以二进制模式来写这些数据(有趣的是,它真的是设计来讲文本数据写为缓存的) 1)bytes、str...
    99+
    2023-01-31
    模块 Python struct
  • python加密模块-hashlib模块
    hashlib模块 用于加密相关的操作,3.X里代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法 (sha比md5 更复杂、md5 不能反解) 具体应用:用于网站防篡改。具...
    99+
    2023-01-31
    模块 python hashlib
  • python-模块
    一:模块的基本认识: 内置模块 内置模块是python自带的功能,在使用内置模块相应功能时,需要先导入再使用    第三方模块 下载-->安装-->使用 1.找到python所在的根目录-->再找到Scrip...
    99+
    2023-01-31
    模块 python
  • Python模块
    初步认识 安装完python后,python自带一部分模块,自带的模块又称作内置模块。其中一部分模块在路径Lib下。(这里的文件夹可以看做包,可以把多个模块放进一个包里) 从模块的来源来讲,可以分三种:内置模块、自定义模块(自己定义的)...
    99+
    2023-01-30
    模块 Python
  • python 模块
    python的模块分为2种:1.标准库(不需要安装,直接导入就可以使用的)2.第三方库(必须要手动安装的)先来介绍2个标准库:sys和os#!/usr/bin/env python# coding: utf-8...
    99+
    2023-01-30
    模块 python
  • python - 模块
    参考:https://www.cnblogs.com/nulige/p/6166205.html一、模块介绍Python Module(模块),就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。文件...
    99+
    2023-01-31
    模块 python
  • python模块学习----nmap模块
    安装nmap模块:pip install python_nmanmap模块说明:python-nmap是一个帮助使用nmap端口扫描器的python库。它允许轻松操纵nmap扫描结果,并且将是一个完美的选择,为需要自动完成扫描任务的系统管理...
    99+
    2023-01-31
    模块 python nmap
  • python常见模块之OS模块和time模块
    一、OS模块概述 Python OS模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。 二、常用方法 三、OS模...
    99+
    2024-04-02
  • Python中的sys模块、random模块和math模块
    一、sys运行时环境模块 sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。 用法: sys.argv:命令行参数List,第...
    99+
    2024-04-02
  • Python基础之hashlib模块subprocess模块logging模块
    目录一、hashlib模块基本操作与用法二、subprocess模块简介基本操作与用法三、logging模块简介基本操作与用法一、hashlib模块 什么是哈希模块: hashlib...
    99+
    2024-04-02
  • Python模块学习之IPy模块
    IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等。Python提供了一个强大的第...
    99+
    2023-01-31
    模块 Python IPy
  • python数学模块(math/decimal模块)
    目录一, math模块2. math库常用函数3.math库使用示例二, decimal模块1. 什么时候使用decimal2. 使用decimal3. decimal使用示例一, ...
    99+
    2024-04-02
  • Python时间模块之datetime模块
    目录 简介 函数介绍及运用 date:日期类 1.获取当前时间  2.日期对象的属性 3.date类中时间和时间戳的转换: 4.修改日期使用replace方法  time:时间类  time类操作 datetime:日期时间类 timede...
    99+
    2023-09-12
    python datetime python 日期时间
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作