python使用redis模块来跟redis实现交互

目录
  • redis模块的使用
    • 1.安装模块
    • 2.导入模块
    • 4.连接池
    • 5.操作
  • 管道
  • 事务
  • 订阅\发布

redis模块的使用

1.安装模块

pip3 install redis

2.导入模块

import redis

3.连接方式

  • 严格连接模式:r=redis.StrictRedis(host=“”,port=)
  • 更Python化的连接模式:r=redis.Redis(host=“”,port=)
  • StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令
  • Redis与StrictRedis的区别是:Redis是StrictRedis的子类,用于向前兼容旧版本的redis-py,并且这个连接方式是更加"python化"的

4.连接池

为了节省资源,减少多次连接损耗,连接池的作用相当于总揽多个客户端与服务端的连接,当新客户端需要连接时,只需要到连接池获取一个连接即可,实际上只是一个连接共享给多个客户端。

import redis
pool= redis.ConnectionPool(host='localhost',port=6379,decode_responses=True)
r=redis.Redis(connection_pool=pool)
r2=redis.Redis(connection_pool=pool)
r.set('apple','a')
print(r.get('apple'))
r2.set('banana','b')
print(r.get('banana'))
print(r.client_list())
print(r2.client_list())#可以看出两个连接的id是一致的,说明是一个客户端连接

5.操作

  • 值的设置和获取,可以参考redis的命令,redis模块中的对应功能的函数名基本与redis中的一致
  • 注意默认情况下,设置的值或取得的值都为bytes类型,如果想改为str类型,需要在连接时添加上decode_responses=True】
  • 设置值:
redis中set()  ==>r.set()
redis中setnx()  ==>r.set()
redis中setex() ==>r.setex()
redis中setbit()  ==>r.setbit()
redis中mset()  == > r.mset()
redis中hset()  ==>r.hset()
redis中sadd() == >r.sadd()
#其他。。。基本redis的命令名与redis模块中的函数名一致

获取:

redis中get() ==》r.get()
redis中mget() ==》r.mget()
redis中getset() ==》r.getset()
redis中getrange() ==》r.getrange()
#其他。。。基本redis的命令名与redis模块中的函数名一致
import redis
r=redis.Redis(host='localhost',port=6379,decode_responses=True)
# r=redis.StrictRedis(host='localhost',port=6379)

r.set('key','value')
value=r.get('key')
# print(type(value))
print(value)
r.hset('info','name','lilei')
r.hset('info','age','18')
print(r.hgetall('info'))
r.sadd('course','math','english','chinese')
print(r.smembers('course'))

管道

一般情况下,执行一条命令后必须等待结果才能输入下一次命令,管道用于在一次请求中执行多个命令。

参数介绍:

transaction:指示是否所有的命令应该以原子方式执行。

import redis,time
r=redis.Redis(host="localhost",port=6379,decode_responses=True)
pipe=r.pipeline(transaction=True)
pipe.set('p1','v2')
pipe.set('p2','v3')
pipe.set('p3','v4')
time.sleep(5)
pipe.execute()

事务

python中可以使用管道来代替事务:

补充:监视watch:pipe.watch()

import redis,time
import redis.exceptions
r=redis.Redis(host='localhost',port=6379,decode_responses=True)
pipe=r.pipeline()
print(r.get('a'))
try:
    # pipe.watch('a')
    pipe.multi()
    pipe.set('here', 'there')
    pipe.set('here1', 'there1')
    pipe.set('here2', 'there2')
    time.sleep(5)
    pipe.execute()

except redis.exceptions.WatchError as e:
    print("Error")

订阅\发布

发布方:

import redis
r=redis.Redis(host="localhost",port=6379,decode_responses=True)
#发布使用publish(self, channel, message):Publish ``message`` on ``channel``.
Flag=True
while Flag:
    msg=input("主播请讲话>>:")
    if len(msg)==0:
        continue
    elif msg=='quit':
        break
    else:
        r.publish('cctv0',msg)

订阅方:

当订阅成功后,第一次接收返回的第一个消息是一个订阅确认消息:

import redis
r=redis.Redis(host="localhost",port=6379,decode_responses=True)
#发布使用publish(self, channel, message):Publish ``message`` on ``channel``.
Flag=True
chan=r.pubsub()#返回一个发布/订阅对象
msg_reciver=chan.subscribe('cctv0')#订阅
msg=chan.parse_response()#第一次会返回订阅确认信息
print(msg)
print("订阅成功,开始接收------")
while Flag:
    msg=chan.parse_response()#接收消息
    print(">>:",msg[2])#此处的信息格式['消息类型', '频道', '消息'],所以使用[2]来获取

到此这篇关于python使用redis模块来跟redis实现交互的文章就介绍到这了,更多相关python redis交互内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python3使用python-redis-lock解决并发计算问题

    目录 需求 python-redis-lock 修改业务代码,增加lock操作 需求 我在最近的一个任务中,存在一个redis高并发计算多个客户端接收预警信息的时长问题. 模型是首先模拟多个客户端连接预警服务器集群,然后向预警服务集群发送告警信息.随后预警服务集群将会向客户端推送告警信息. 此时,我记录了发送告警至预警集群的时间,并且在客户端还会记录接收到告警的时间. 我将这个时间都会记录到redis中,那么此时就会有一个问题,当多个客户端抢占式往redis 读取数据,计算,设置数据,这个过程是

  • Python模块对Redis数据库的连接与使用讲解

    下面看看Python模块对Redis数据库的连接与使用: ​ 1.Python连接Redis数据库方法: import redis res = redis.Redis( host="127.0.0.1", port=6379, db=0, password="XXXXXX", decode_responses=True ) res.set("name","Li") print(res.get("name")

  • python动态网站爬虫实战(requests+xpath+demjson+redis)

    目录 前言 一.主要思路 1.观察网站 2.编写爬虫代码 二.爬虫实战 1.登陆获取cookie 三.总结 前言 之前简单学习过python爬虫基础知识,并且用过scrapy框架爬取数据,都是直接能用xpath定位到目标区域然后爬取.可这次碰到的需求是爬取一个用asp.net编写的教育网站并且将教学ppt一次性爬取下来,由于该网站部分内容渲染采用了js,所以比较难用xpath直接定位,同时发起下载ppt的请求比较难找. 经过琢磨和尝试后爬取成功,记录整个爬取思路供自己和大家学习.文章比较详细,对

  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理

    目录 布隆过滤器的原理 在 Python 中使用布隆过滤器 1.标准布隆过滤器. 2.计数布隆过滤器. 3.标准扩容布隆过滤器. 4.计数扩容布隆过滤器. Redis 中使用布隆过滤器 最后的话 在开发软件时,我们经常需要判断一个元素是否在一个集合中,比如,如何判断单词的拼写是否错误(判断单词是否在已知的字典中):在网络爬虫里,如何确认一个网址是否已经爬取过:反垃圾邮件系统中,如何判断一个邮件地址是否为垃圾邮件地址等等. 如果这些作为面试题那就很有区分度了,初级工程师就会说,把全部的元素都存在

  • python导入导出redis数据的实现

    目录 一.导出redis某个库的数据 使用python向Redis批量导入数据 二.导入redis某个库的数据 注:以String类型为例 一.导出redis某个库的数据 import redis import json file_path = "why.json" redis_conn = redis.Redis(host="192.168.1.123", port=6387, password="123zxcv", db=2, decode_

  • Python访问Redis的详细操作

    1.连接 测试连接是否成功: import redis r = redis.Redis(host='192.168.136.102', port=6379, db=0,decode_responses=True) r.set('foo', 'bar') print(r.get('foo')) del r redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串. redis 提供两个类 Redis 和 StrictRedis, StrictRedis

  • 解决python-redis-lock分布式锁的问题

    python-redis-lock 官方文档 不错的博文可参考 问题背景 在使用celery执行我们的异步任务时,为了提高效率,celery可以开启多个进程来启动对应的worker. 但是会出现这么一种情况:在获取到数据源之后要对数据库进行扫描,根据UUID来断定是插入还是更新,两个worker 同时 (相差0.001S)拿到了UUID但是在其中一个没插入时,另一个也扫描完了数据库,这时这两个worker都会认为自己拿到的UUID是在数据库中没有存在过的,所以都会调用INSERT方法来进行插入操

  • python 实现 redis 数据库的操作

    目录 一.安装 二.连接 三.string基本命令 四.hash基本命令 五.list基本命令 六.set基本命令 七.zset基本命令 八.其他通用命令 九.管道命令 一.安装 redis 是一个 Key-Value 数据库 Value 支持 string(字符串),list(列表),set(集合),zset(有序集合),hash(哈希类型)等类型 pip install redis 二.连接 import redis # 方式一 r = redis.StrictRedis(host='loc

  • 详解用python实现爬取CSDN热门评论URL并存入redis

    一.配置webdriver 下载谷歌浏览器驱动,并配置好 import time import random from PIL import Image from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import exp

  • python3操作redis实现List列表实例

    目录 下面是具体例子详解和代码: ①lrange(key , start , stop) ②lpush(key , value) ③rpush(key , value) ④lpop(key) ⑤rpop(key) ⑥blpop(key) ⑦brpop(key) ⑧brpoplpush(source,destination,timeout) ⑨lindex(key,index) ⑩linsert(key,before|after,privot,value) ①①llen(key) ①②lpushx

随机推荐