網(wǎng)站空間免費(fèi)建設(shè)網(wǎng)站職業(yè)證書
鶴壁市浩天電氣有限公司
2026/01/24 10:43:41
網(wǎng)站空間免費(fèi),建設(shè)網(wǎng)站職業(yè)證書,制作視頻軟件,ftp 網(wǎng)站管理與mongo和mysql不同#xff0c;redis多用于存儲(chǔ)中間層#xff0c;目前我多用于查重去重#xff0c;我們需要安裝一個(gè)庫#xff1a;
pip install redis之前的aioredis合并到redis中了
同步操作
建立連接
import redis # 同步操作都這樣導(dǎo)包
client_syn redis.Redis(hostredis多用于存儲(chǔ)中間層目前我多用于查重去重我們需要安裝一個(gè)庫pip install redis之前的aioredis合并到redis中了同步操作建立連接importredis# 同步操作都這樣導(dǎo)包c(diǎn)lient_synredis.Redis(host127.0.0.1,port6379,decode_responsesTrue)同步操作# 給Redis中鍵為count的字符串類型鍵值對設(shè)置值為10覆蓋原有值無過期時(shí)間client_syn.set(count,10)# 獲取Redis中鍵為count的字符串類型值返回bytes類型若設(shè)置decode_responsesTrue則返回字符串client_syn.get(count)# 向Redis中名為duplicate的集合Set添加元素md5_1集合自動(dòng)去重client_syn.sadd(duplicate,md5_1)# 判斷md5_1是否是Redis中duplicate集合的成員返回True/Falseclient_syn.sismember(duplicate,md5_1)去重操作一般用后兩個(gè)實(shí)現(xiàn)代碼如下# 模擬待處理的一批數(shù)據(jù)含重復(fù)值data_list[md5_1,md5_2,md5_1,md5_3]# 這里其實(shí)會(huì)將某些一定不能相同的數(shù)據(jù)加密成md5用于去重操作fordataindata_list:# 1. 先判斷當(dāng)前數(shù)據(jù)是否已存在于去重集合中# 存在則跳過實(shí)現(xiàn)去重ifclient_syn.sismember(duplicate,data):print(f數(shù)據(jù){data}已存在跳過處理)continue# 2. 數(shù)據(jù)不存在執(zhí)行業(yè)務(wù)處理比如存儲(chǔ)、爬蟲等print(f處理新數(shù)據(jù){data})# 3. 將處理后的新數(shù)據(jù)加入去重集合# Sadd會(huì)自動(dòng)忽略重復(fù)元素即使重復(fù)執(zhí)行也不會(huì)存入重復(fù)值client_syn.sadd(duplicate,data)異步操作建立連接第一種是普通連接適合低并發(fā)的操作fromredisimportasyncioasaioredis client_aioawaitaioredis.from_url(redis://localhost:6379/0,# Redis 地址主機(jī)端口數(shù)據(jù)庫編號(hào)0-15decode_responsesTrue,# 自動(dòng)把 Redis 返回的 bytes 轉(zhuǎn)字符串無需手動(dòng) decodepasswordNone,# 無密碼設(shè)為 None有密碼則填字符串如 123456encodingutf-8# 字符編碼固定 utf-8 即可)第二種是建立連接池適合高并發(fā)# 先創(chuàng)建連接池控制最大連接數(shù)避免連接耗盡poolaioredis.ConnectionPool.from_url(redis://localhost:6379/0,max_connections100,# 連接池最大連接數(shù)根據(jù)服務(wù)器性能調(diào)整decode_responsesTrue# 統(tǒng)一開啟字符串自動(dòng)解碼)# 基于連接池創(chuàng)建 Redis 實(shí)例redis_poolaioredis.Redis(connection_poolpool)基本操作基礎(chǔ)K-V操作key valueawaitclient_aio.set(name,張三,ex60)# 新增僅當(dāng) keyage 不存在時(shí)設(shè)置值20setnx set if not exists避免覆蓋awaitclient_aio.setnx(age,20)# 查詢獲取單個(gè) key 的值nameawaitclient_aio.get(name)ageawaitclient_aio.get(age)print(f【單個(gè)查詢】name{name}, age{age})# 輸出name張三, age20# 刪除刪除指定 keyawaitclient_aio.delete(age)print(f【刪除后查詢】age{awaitclient_aio.get(age)})# 輸出ageNone# 批量設(shè)置一次設(shè)置多個(gè) key-valueawaitclient_aio.mset({k1:v1,k2:v2,k3:v3})# 批量獲取一次獲取多個(gè) key 的值返回列表順序與入?yún)⒁恢耣atch_dataawaitclient_aio.mget([k1,k2,k3])print(f【批量查詢】{batch_data})# 輸出[v1, v2, v3]集合基礎(chǔ)操作# 新增元素自動(dòng)去重 # 向集合 unique_users 添加 3 個(gè)元素其中 user1 重復(fù)自動(dòng)過濾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. 獲取集合元素?cái)?shù)量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【集合元素?cái)?shù)量】{user_count})# 輸出2# 刪除元素 # 從集合中刪除指定元素 user2awaitclient_aio.srem(unique_users,user2)print(f【刪除后元素】{awaitclient_aio.smembers(unique_users)})# 輸出{user1}去重可配合sadd和sismember關(guān)閉連接和pymongo一樣redis不論同步異步都不需要手動(dòng)關(guān)閉連接常用組合異步importasynciofromredisimportasyncioasaioredisasyncdefget_redis_client():創(chuàng)建Redis異步連接生產(chǎn)級連接池配置# 自定義連接池高并發(fā)/生產(chǎn)場景首選poolaioredis.ConnectionPool.from_url(redis://localhost:6379/0,max_connections50,# 按需調(diào)整默認(rèn)足夠日常使用decode_responsesTrue# 自動(dòng)轉(zhuǎn)字符串省手動(dòng)解碼)returnaioredis.Redis(connection_poolpool)asyncdefredis_common_operations():# 1. 獲取連接redisawaitget_redis_client()# 【最常用】StringKV鍵值 awaitredis.set(name,張三,ex30)# 設(shè)置值30秒過期print(String查詢,awaitredis.get(name))# 獲取值# 【最常用】Set去重核心 awaitredis.sadd(unique_ids,id1,id2,id1)# 自動(dòng)去重print(Set所有元素,awaitredis.smembers(unique_ids))# 查所有print(元素是否存在,awaitredis.sismember(unique_ids,id1))# 去重判斷# 【常用】Hash存儲(chǔ)對象 awaitredis.hset(user:1001,mapping{name:李四,age:25})# 存對象print(Hash查詢,awaitredis.hgetall(user:1001))# 查整個(gè)對象# 【常用】Pipeline批量原子操作 piperedis.pipeline()pipe.set(a,1).incr(a).set(b,2)print(管道執(zhí)行結(jié)果,awaitpipe.execute())# 關(guān)閉連接可選程序退出自動(dòng)釋放awaitredis.close()# 運(yùn)行測試if__name____main__:asyncio.run(redis_common_operations())小結(jié)redis主要作用是去重所以會(huì)建立連接然后hash加密作為值通過sadd和sismember配合去重即可后面隨用隨查如有什么問題及時(shí)提出加油加油