news 2026/9/2 23:36:14

py连接Redis

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
py连接Redis

与mongo和mysql不同,redis多用于存储中间层,目前我多用于查重去重,我们需要安装一个库:

pip install redis

之前的aioredis合并到redis中了

同步操作

建立连接

importredis# 同步操作都这样导包client_syn=redis.Redis(host="127.0.0.1",port=6379,decode_responses=True)

同步操作

# 给Redis中键为"count"的字符串类型键值对设置值为10(覆盖原有值,无过期时间)client_syn.set("count",10)# 获取Redis中键为"count"的字符串类型值(返回bytes类型,若设置decode_responses=True则返回字符串)client_syn.get("count")# 向Redis中名为"duplicate"的集合(Set)添加元素"md5_1",集合自动去重client_syn.sadd("duplicate","md5_1")# 判断"md5_1"是否是Redis中"duplicate"集合的成员,返回True/Falseclient_syn.sismember("duplicate","md5_1")

去重操作一般用后两个,实现代码如下:

# 模拟待处理的一批数据(含重复值)data_list=["md5_1","md5_2","md5_1","md5_3"]# 这里其实会将某些一定不能相同的数据加密成md5用于去重操作fordataindata_list:# 1. 先判断当前数据是否已存在于去重集合中# (存在则跳过,实现去重)ifclient_syn.sismember("duplicate",data):print(f"数据{data}已存在,跳过处理")continue# 2. 数据不存在,执行业务处理(比如存储、爬虫等)print(f"处理新数据:{data}")# 3. 将处理后的新数据加入去重集合# (Sadd会自动忽略重复元素,即使重复执行也不会存入重复值)client_syn.sadd("duplicate",data)

异步操作

建立连接

第一种是普通连接,适合低并发的操作:
fromredisimportasyncioasaioredis client_aio=awaitaioredis.from_url("redis://localhost:6379/0",# Redis 地址:主机+端口+数据库编号(0-15)decode_responses=True,# 自动把 Redis 返回的 bytes 转字符串(无需手动 decode)password=None,# 无密码设为 None,有密码则填字符串(如 "123456")encoding="utf-8"# 字符编码,固定 utf-8 即可)

第二种是建立连接池,适合高并发:

# 先创建连接池(控制最大连接数,避免连接耗尽)pool=aioredis.ConnectionPool.from_url("redis://localhost:6379/0",max_connections=100,# 连接池最大连接数(根据服务器性能调整)decode_responses=True# 统一开启字符串自动解码)# 基于连接池创建 Redis 实例redis_pool=aioredis.Redis(connection_pool=pool)

基本操作

基础K-V操作(key value)
awaitclient_aio.set("name","张三",ex=60)# 新增:仅当 key=age 不存在时设置值=20(setnx = set if not exists,避免覆盖)awaitclient_aio.setnx("age",20)# 查询:获取单个 key 的值name=awaitclient_aio.get("name")age=awaitclient_aio.get("age")print(f"【单个查询】name={name}, age={age}")# 输出:name=张三, age=20# 删除:删除指定 keyawaitclient_aio.delete("age")print(f"【删除后查询】age={awaitclient_aio.get('age')}")# 输出:age=None# 批量设置:一次设置多个 key-valueawaitclient_aio.mset({"k1":"v1","k2":"v2","k3":"v3"})# 批量获取:一次获取多个 key 的值(返回列表,顺序与入参一致)batch_data=awaitclient_aio.mget(["k1","k2","k3"])print(f"【批量查询】{batch_data}")# 输出:['v1', 'v2', 'v3']

集合基础操作

# ========== 新增元素(自动去重) ==========# 向集合 unique_users 添加 3 个元素(其中 user1 重复,自动过滤)awaitclient_aio.sadd("unique_users","user1","user2","user1")# ========== 查询操作 ==========# 1. 获取集合所有元素(返回集合类型,天然去重)all_users=awaitclient_aio.smembers("unique_users")# 2. 判断元素是否在集合中(返回 True/False,去重核心判断)is_user1_exist=awaitclient_aio.sismember("unique_users","user1")is_user3_exist=awaitclient_aio.sismember("unique_users","user3")# 3. 获取集合元素数量user_count=awaitclient_aio.scard("unique_users")print(f"【集合所有元素】{all_users}")# 输出:{'user1', 'user2'}print(f"【user1 是否存在】{is_user1_exist}")# 输出:Trueprint(f"【user3 是否存在】{is_user3_exist}")# 输出:Falseprint(f"【集合元素数量】{user_count}")# 输出:2# ========== 删除元素 ==========# 从集合中删除指定元素 user2awaitclient_aio.srem("unique_users","user2")print(f"【删除后元素】{awaitclient_aio.smembers('unique_users')}")# 输出:{'user1'}

去重可配合sadd和sismember:

关闭连接

和pymongo一样,redis不论同步异步都不需要手动关闭连接

常用组合(异步)

importasynciofromredisimportasyncioasaioredisasyncdefget_redis_client():"""创建Redis异步连接(生产级连接池配置)"""# 自定义连接池(高并发/生产场景首选)pool=aioredis.ConnectionPool.from_url("redis://localhost:6379/0",max_connections=50,# 按需调整,默认足够日常使用decode_responses=True# 自动转字符串,省手动解码)returnaioredis.Redis(connection_pool=pool)asyncdefredis_common_operations():# 1. 获取连接redis=awaitget_redis_client()# ========== 【最常用】String(KV键值) ==========awaitredis.set("name","张三",ex=30)# 设置值+30秒过期print("String查询:",awaitredis.get("name"))# 获取值# ========== 【最常用】Set(去重核心) ==========awaitredis.sadd("unique_ids","id1","id2","id1")# 自动去重print("Set所有元素:",awaitredis.smembers("unique_ids"))# 查所有print("元素是否存在:",awaitredis.sismember("unique_ids","id1"))# 去重判断# ========== 【常用】Hash(存储对象) ==========awaitredis.hset("user:1001",mapping={"name":"李四","age":25})# 存对象print("Hash查询:",awaitredis.hgetall("user:1001"))# 查整个对象# ========== 【常用】Pipeline(批量原子操作) ==========pipe=redis.pipeline()pipe.set("a",1).incr("a").set("b",2)print("管道执行结果:",awaitpipe.execute())# 关闭连接(可选,程序退出自动释放)awaitredis.close()# 运行测试if__name__=="__main__":asyncio.run(redis_common_operations())

小结

redis主要作用是去重,所以会建立连接,然后hash加密作为值,通过sadd和sismember配合去重即可,后面随用随查,如有什么问题及时提出,加油加油
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 14:45:42

前端高频面试题之Promise相关方法

前言 Promise一直是前端面试中的热点,下面给大家介绍下Promise的相关方法。 1. Promise.all 1.1 介绍 调用Promise.all时需要传入一个promise数组,我们称它为promiseArr,然后Promise.all会返回一个新的Promise,我们把它称为p&…

作者头像 李华
网站建设 2026/9/2 17:09:24

如何快速解决网盘限速:网盘直链下载助手的完整使用指南

你是否曾经被网盘的龟速下载折磨得抓狂?每次下载大文件都要等上几个小时,甚至被迫安装各种官方客户端?网盘直链下载助手就是你的终极解决方案!这款免费开源的浏览器扩展脚本能够轻松获取百度网盘、阿里云盘等六大主流网盘的直链下…

作者头像 李华
网站建设 2026/9/2 10:06:36

Ghidra完整安装教程:5分钟搞定专业二进制分析环境搭建

还在为复杂的逆向工程工具安装而头疼吗?Ghidra作为一款开源的专业二进制分析平台,为安全研究员和开发者提供了完全免费且功能强大的反汇编和反编译能力。本教程将带你快速完成Ghidra的完整安装配置,让你在最短时间内开启专业的逆向工程之旅。…

作者头像 李华
网站建设 2026/9/2 21:38:06

Zabbix与Prometheus在服务器及网络设备管理中的应用

Zabbix与Prometheus在服务器及网络设备管理中的应用 一、监控的核心价值与工具选择逻辑 在数字化运维场景中,服务器性能衰减、网络端口异常中断等问题可能引发业务雪崩。因此,构建覆盖 “服务器核心指标 网络设备运行状态” 的监控体系,是实…

作者头像 李华
网站建设 2026/9/2 22:43:57

5分钟快速上手uv-ui框架:跨平台Vue开发终极指南

5分钟快速上手uv-ui框架:跨平台Vue开发终极指南 【免费下载链接】uv-ui uv-ui 破釜沉舟之兼容vue32、app、h5、小程序等多端基于uni-app和uView2.x的生态框架,支持单独导入,开箱即用,利剑出击。 项目地址: https://gitcode.com/…

作者头像 李华
网站建设 2026/9/2 21:56:36

设计效率革命:这些工具让你告别加班到凌晨的日子

设计效率革命:这些工具让你告别加班到凌晨的日子 【免费下载链接】sketch-meaxure 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-meaxure 在当今快节奏的设计行业中,提升设计效率已经成为每个设计师必须面对的课题。面对繁重的设计任务和…

作者头像 李华