日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

redis异步写入mysql_异步操作redis,mysql

發(fā)布時間:2023/12/19 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis异步写入mysql_异步操作redis,mysql 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

uvloop

asyncio 的事件循環(huán)的替代方案

效率默認大于asyncio的事件循環(huán)

性能是更高的

性能接近go

pip install uvloop

import asyncio

import uvloop

asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())

...

asgi-->uvicorn

內(nèi)部使用的是uvlooop

異步操作redis

在我們操作redis的時候,連接,操作,斷開都是網(wǎng)絡(luò)io

asyncio 提高并發(fā)

pip install aioredis

import asyncio

import uvloop

asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())

import aioredis

async def execute(address,password):

print('開始執(zhí)行',address)

redis = await aioredis.create_redis(address)

await redis.hmset_dict('car',key1=1,key2=2,key3=3)

res = await redis.hgetall('car',encoding='utf8')

print(res)

redis.close()

await redis.wait_closed()

print('結(jié)束',address)

asyncio.run(execute('redis://127.0.0.1:6379',password=''))

import asyncio

import uvloop

asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())

import aioredis

async def execute(address,password):

print('開始執(zhí)行',address)

redis = await aioredis.create_redis(address)

await redis.hmset_dict('car',key1=1,key2=2,key3=3)

res = await redis.hgetall('car',encoding='utf8')

print(res)

redis.close()

await redis.wait_closed()

print('結(jié)束',address)

# asyncio.run(execute('redis://127.0.0.1:6379',password=''))

task_list = [

execute('redis://127.0.0.1:6379',password='') for i in range(0,10000)

]

asyncio.run(asyncio.wait(task_list))

# aioredis.errors.MaxClientsError: ERR max number of clients reached

通過lsof -p pid |wc -l ,發(fā)現(xiàn)連接數(shù)量超過10500. 出錯。

解決方法1:

1. 增加redis的最大連接數(shù):修改redis.conf文件的maxclient ,修改到20000.

2. 一般redis的連接使用完畢之后會釋放,如果要用lsof命令發(fā)現(xiàn)鏈接始終沒有減少,則檢查代碼,看下使用redis的代碼部分是否執(zhí)行類似close()的函數(shù)。將資源進行釋放

import asyncio

import uvloop

asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())

import aioredis

async def execute(address,password):

print('開始執(zhí)行',address)

try:

redis = await aioredis.create_redis(address)

await redis.hmset_dict('car',key1=1,key2=2,key3=3)

res = await redis.hgetall('car',encoding='utf8')

print(res)

redis.close()

await redis.wait_closed()

print('結(jié)束',address)

except aioredis.errors.MaxClientsError as e :

print(e)

await asyncio.sleep(10)

# asyncio.run(execute('redis://127.0.0.1:6379',password=''))

task_list = [

execute('redis://127.0.0.1:6379',password='') for i in range(0,10000)

]

asyncio.run(asyncio.wait(task_list))

# aioredis.errors.MaxClientsError: ERR max number of clients reached

異步操作mysql

pip install aiomysql

import aiomysql

import asyncio

import pymysql

async def execute(host,user,pwd):

try:

conn = await aiomysql.connect(host=host,port=3306,user=user,password=pwd)

cur = await conn.cursor()

await cur.execute("select host,user from mysql.user;")

res = await cur.fetchall()

print(res)

await cur.close()

conn.close()

except pymysql.err.OperationalError as e :

asyncio.sleep(10)

host='127.0.0.1'

user='root'

pwd='1234'

task_list =[

execute(host,user,pwd) for i in range(10000)

]

asyncio.run(asyncio.wait(task_list))

# pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1'")

總結(jié)

以上是生活随笔為你收集整理的redis异步写入mysql_异步操作redis,mysql的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。