网站空间免费,建设网站职业证书,制作视频软件,ftp 网站管理与mongo和mysql不同#xff0c;redis多用于存储中间层#xff0c;目前我多用于查重去重#xff0c;我们需要安装一个库#xff1a;
pip install redis之前的aioredis合并到redis中了
同步操作
建立连接
import redis # 同步操作都这样导包
client_syn redis.Redis(hostredis多用于存储中间层目前我多用于查重去重我们需要安装一个库pip install redis之前的aioredis合并到redis中了同步操作建立连接importredis# 同步操作都这样导包client_synredis.Redis(host127.0.0.1,port6379,decode_responsesTrue)同步操作# 给Redis中键为count的字符串类型键值对设置值为10覆盖原有值无过期时间client_syn.set(count,10)# 获取Redis中键为count的字符串类型值返回bytes类型若设置decode_responsesTrue则返回字符串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_aioawaitaioredis.from_url(redis://localhost:6379/0,# Redis 地址主机端口数据库编号0-15decode_responsesTrue,# 自动把 Redis 返回的 bytes 转字符串无需手动 decodepasswordNone,# 无密码设为 None有密码则填字符串如 123456encodingutf-8# 字符编码固定 utf-8 即可)第二种是建立连接池适合高并发# 先创建连接池控制最大连接数避免连接耗尽poolaioredis.ConnectionPool.from_url(redis://localhost:6379/0,max_connections100,# 连接池最大连接数根据服务器性能调整decode_responsesTrue# 统一开启字符串自动解码)# 基于连接池创建 Redis 实例redis_poolaioredis.Redis(connection_poolpool)基本操作基础K-V操作key valueawaitclient_aio.set(name,张三,ex60)# 新增仅当 keyage 不存在时设置值20setnx set if not exists避免覆盖awaitclient_aio.setnx(age,20)# 查询获取单个 key 的值nameawaitclient_aio.get(name)ageawaitclient_aio.get(age)print(f【单个查询】name{name}, age{age})# 输出name张三, age20# 删除删除指定 keyawaitclient_aio.delete(age)print(f【删除后查询】age{awaitclient_aio.get(age)})# 输出ageNone# 批量设置一次设置多个 key-valueawaitclient_aio.mset({k1:v1,k2:v2,k3:v3})# 批量获取一次获取多个 key 的值返回列表顺序与入参一致batch_dataawaitclient_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_usersawaitclient_aio.smembers(unique_users)# 2. 判断元素是否在集合中返回 True/False去重核心判断is_user1_existawaitclient_aio.sismember(unique_users,user1)is_user3_existawaitclient_aio.sismember(unique_users,user3)# 3. 获取集合元素数量user_countawaitclient_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异步连接生产级连接池配置# 自定义连接池高并发/生产场景首选poolaioredis.ConnectionPool.from_url(redis://localhost:6379/0,max_connections50,# 按需调整默认足够日常使用decode_responsesTrue# 自动转字符串省手动解码)returnaioredis.Redis(connection_poolpool)asyncdefredis_common_operations():# 1. 获取连接redisawaitget_redis_client()# 【最常用】StringKV键值 awaitredis.set(name,张三,ex30)# 设置值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批量原子操作 piperedis.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配合去重即可后面随用随查如有什么问题及时提出加油加油