news 2026/4/18 6:59:54

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/4/15 11:31:37

亲测!山东AI手机租赁服务商实践案例

山东AI手机租赁服务商实践案例剖析:求索未来小圆AI手机的卓越表现行业痛点分析当前,山东AI手机领域面临着诸多技术挑战。一方面,数据安全问题成为行业发展的一大阻碍,部分AI手机在运行过程中存在获取非公开数据的风险,…

作者头像 李华
网站建设 2026/4/17 20:54:50

终极指南:快速掌握心电图AI分类开源项目

终极指南:快速掌握心电图AI分类开源项目 【免费下载链接】ecg-classification Code for training and test machine learning classifiers on MIT-BIH Arrhyhtmia database 项目地址: https://gitcode.com/gh_mirrors/ec/ecg-classification 心电图AI分类开源…

作者头像 李华
网站建设 2026/4/18 5:31:04

终极船舶控制实战指南:水动力学建模与仿真实践全解析

终极船舶控制实战指南:水动力学建模与仿真实践全解析 【免费下载链接】FossenHandbook Handbook of Marine Craft Hydrodynamics and Motion Control is an extensive study of the latest research in marine craft hydrodynamics, guidance, navigation, and cont…

作者头像 李华
网站建设 2026/4/18 6:59:38

Quill图片尺寸调整模块:告别繁琐的图片编辑流程

Quill图片尺寸调整模块:告别繁琐的图片编辑流程 【免费下载链接】quill-image-resize-module A module for Quill rich text editor to allow images to be resized. 项目地址: https://gitcode.com/gh_mirrors/qui/quill-image-resize-module 还在为富文本编…

作者头像 李华
网站建设 2026/4/18 6:59:09

28、XML 数据绑定与 VML 图形技术入门

XML 数据绑定与 VML 图形技术入门 1. XML 数据绑定操作与概念 在进行 XML 数据相关操作时,有一系列具体步骤需要遵循。首先要在 HTML - Kit 预览中查看文件并保存。接着,使用 Internet Explorer 浏览器,在地址栏输入 http://localhost/SpaceGems/catalog.htm 。若操作成…

作者头像 李华
网站建设 2026/4/16 13:57:42

34、资源描述框架(RDF)入门指南

资源描述框架(RDF)入门指南 1. RDF资源获取 若需全面了解RDF实现、应用及其他相关资源,可查看以下网站: - W3C的RDF主页: www.w3.org/RDF/ - Dave Beckett的资源描述框架(RDF)资源指南: www.ilrt.bris.ac.uk/discovery/rdf/resources/ 2. RDF概念与语法 RDF有…

作者头像 李华