【Python3】异步操作 redis

aioredis 在高版本已经不支持了, 不要用

代码示例

  • redis 连接池
  • 异步操作redis以及接口
import asyncio
from sanic import Sanic
from sanic.response import json
import redis.asyncio as redis
from redis.asyncio import ConnectionPool# 创建 Sanic 应用
app = Sanic("RedisSanicApp")# 初始化 Redis 连接池
pool = ConnectionPool(host='localhost', port=6379, db=0)
redis_client = redis.StrictRedis(connection_pool=pool)@app.route("/set_redis/<key>/<value>")
async def set_redis(request, key, value):try:# 使用连接池异步设置键值对await redis_client.set(key, value)return json({"status": "OK", "message": f"Data saved: {key} = {value}"})except Exception as e:return json({"status": "error", "message": str(e)})@app.route("/get_redis/<key>")
async def get_redis(request, key):try:# 使用连接池异步获取数据value = await redis_client.get(key)if value:return json({"status": "OK", "key": key, "value": value.decode()})else:return json({"status": "not_found", "message": f"Key '{key}' not found"})except Exception as e:return json({"status": "error", "message": str(e)})if __name__ == "__main__":app.run(host="0.0.0.0", port=8000)

测试接口
存数据到 Redis:

curl http://localhost:8000/set_redis/my_key/my_value

这将会在 Redis 中存入键为 my_key,值为 my_value 的数据。

从 Redis 获取数据:

curl http://localhost:8000/get_redis/my_key

这将返回 Redis 中 my_key 对应的值,应该是 my_value。

异步redis pipeline

from sanic import Sanic
from sanic.response import json
import redis.asyncio as redis# 创建 Sanic 应用实例
app = Sanic("async_redis_pipeline_example")# 创建 Redis 客户端
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)@app.route("/pipeline_set/<key>/<value>")
async def pipeline_set(request, key, value):# 使用 pipeline 批量执行多个 Redis 命令async with redis_client.pipeline() as pipe:# 将多个命令添加到 pipelineawait pipe.set(key, value)await pipe.get(key)# 执行所有命令result = await pipe.execute()# 获取执行结果set_result = result[0]  # set 命令的返回结果get_result = result[1]  # get 命令的返回结果return json({"set_result": set_result, "key": key, "value": get_result.decode('utf-8')})@app.route("/pipeline_incr/<key>")
async def pipeline_incr(request, key):# 使用 pipeline 执行多个增量操作async with redis_client.pipeline() as pipe:# 预先增加多个值await pipe.incr(key)await pipe.incr(key)await pipe.incr(key)# 执行所有命令result = await pipe.execute()# 返回最后结果return json({"key": key, "value": result[-1]})if __name__ == "__main__":app.run(host="0.0.0.0", port=8000)

注意

虽然可以手动管理 pipeline,

# 全局定义的 pipeline
pipeline = redis_client.pipeline()

资源管理问题:全局的 pipeline 是共享的,如果不同的请求同时使用它,可能会导致并发问题,因为 Pipeline 并不是线程安全的。

如果你在一个请求期间同时修改和执行管道的命令,可能会导致错误。

最好使用

async with redis_client.pipeline() as pipe 

来确保管道在每次请求处理后都能正确关闭,避免因手动管理造成的资源泄漏或并发问题。这样做更安全、简洁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 混入(Mixins)

Vue3 混入(Mixins) 引言 在Vue3中,混入(Mixins)是一种提供可复用功能的方式。通过混入,我们可以将组件的逻辑抽离出来,以便在多个组件之间共享。Vue3的混入机制与Vue2类似,但在某些方面进行了优化和改进。本文将详细介绍Vue3中混入的使用方法、注意事项以及最佳实践。…

腾讯云AI代码助手编程挑战赛-每日一句

一、作品简介 “每日一句”是一个基于Python的图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;旨在为用户提供随机的中英文名言警句。它利用腾讯云AI代码助手辅助开发&#xff0c;为用户带来便捷、高效的阅读体验。 二、技术架构 1. 编程语言&#xff1a;使用P…

C语言的语法

C语言的语法与应用探讨 C语言作为一种高效的程序设计语言&#xff0c;自1970年代问世以来&#xff0c;一直在科学计算、系统编程、嵌入式系统等领域中扮演着重要角色。本文将深入探讨C语言的基本语法、数据结构、控制结构以及其在实际应用中的重要性。 一、C语言基础 1.1 数…

【AI工具】PDFMathTranslate安装使用

用了一天时间&#xff0c;安装并使用了PDFMathTranslate这款PDF文档翻译工具。 PDFMathTranslate是能够完整保留排版的 PDF 文档全文双语翻译项目&#xff0c;之前使用文档翻译的时候&#xff0c;对于论文这种类型的文章&#xff0c;由于图表和公式太多&#xff0c;文档翻译经常…

Ubuntu 上安装 Docker

在Ubuntu上安装Docker的步骤如下&#xff1a; 1. 更新系统 首先&#xff0c;更新系统的软件包索引&#xff1a; sudo apt update2. 安装必要的依赖包 接着&#xff0c;安装一些必要的依赖包&#xff0c;用于安装Docker的官方仓库&#xff1a; sudo apt install apt-transp…

conda 批量安装requirements.txt文件

conda 批量安装requirements.txt文件中包含的组件依赖 conda install --yes --file requirements.txt #这种执行方式&#xff0c;一遇到安装不上就整体停止不会继续下面的包安装。 下面这条命令能解决上面出现的不执行后续包的问题&#xff0c;需要在CMD窗口执行&#xff1a; 点…

网络安全图谱以及溯源算法

​ 本文提出了一种网络攻击溯源框架&#xff0c;以及一种网络安全知识图谱&#xff0c;该图由六个部分组成&#xff0c;G <H&#xff0c;V&#xff0c;A&#xff0c;E&#xff0c;L&#xff0c;S&#xff0c;R>。 1|11.知识图 ​ 网络知识图由六个部分组成&#xff0c…

上汽乘用车研发流程

目的 最近刚入职主机厂&#xff0c;工作中所提到各个阶段名称与之前在供应商那边不一致&#xff0c;概念有点模糊&#xff0c;所以打算学习了解一番 概念 术语 EP: enginerring prototype car 工程样车 Mule Car: 骡子车 Simulator Car&#xff1a;模拟样车 PPV&#xff1a;…

封装/前线修饰符/Idea项目结构/package/impore

目录 1. 封装的情景引入 2. 封装的体现 3. 权限修饰符 4. Idea 项目结构 5. package 关键字 6. import 关键字 7. 练习 程序设计&#xff1a;高内聚&#xff0c;低耦合&#xff1b; 高内聚&#xff1a;将类的内部操作“隐藏”起来&#xff0c;不需要外界干涉&#xff1b…

【生物信息】如何使用 h5py 读取 HDF5 格式文件中的数据并将其转换为 NumPy 数组

data_mat h5py.File(args.data_file) x1 np.array(data_mat[X1]) x2 np.array(data_mat[X2]) if not args.no_labels: y np.array(data_mat[Y]) data_mat.close() 这段代码展示了如何使用 h5py 读取 HDF5 格式文件中的数据并将其转换为 NumPy 数组。以下是代码的详细解释&a…

计算机网络 (23)IP层转发分组的过程

一、IP层的基本功能 IP层&#xff08;Internet Protocol Layer&#xff09;是网络通信模型中的关键层&#xff0c;属于OSI模型的第三层&#xff0c;即网络层。它负责在不同网络之间传输数据包&#xff0c;实现网络间的互联。IP层的主要功能包括寻址、路由、分段和重组、错误检测…

【W800】UART 的使用与问题

1.开发环境 OS: Windows 11开发板&#xff1a;海凌科 HLK-W800-KIT-PROSDK: W80X_SDK_v1.00.10IDE: CSKY Development Kit 2.UART 使用 在 SDK 中创建文件 uart_test.h 和 uart_test.c&#xff0c;然后在 CDK 项目中添加这两个文件&#xff0c;CDK 会自动 include 头文件。 …

万界星空科技质量管理QMS系统具体功能介绍

一、什么是QMS系统&#xff0c;有什么价值&#xff1f; 1、QMS 系统即质量管理系统&#xff08;Quality Management System&#xff09;。 它是一套用于管理和控制企业产品或服务质量的集成化体系。 2、QMS 系统的价值主要体现在以下几个方面&#xff1a; 确保产品质量一致性…

【C++】B2099 矩阵交换行

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述题目描述输入格式输出格式输入输出样例输入 #1输出 #1 &#x1f4af;题目分析&#x1f4af;不同解法分析我的做法实现步骤&#xff1a;优点&#xff1a;不足&#…

Tableau数据可视化与仪表盘搭建-数据连接

目录 连接本地文件 课程操作 连接方式&#xff08;实时/数据提取&#xff09; 保存工作簿 筛选器 数据处理 连接数据有三种类型 第一种&#xff0c;连接到本地文件&#xff0c;例如Excel&#xff0c;csv&#xff0c;JSON等 第二种&#xff0c;连接到数据库&#xff0c;例…

Linux(Centos 7.6)命令详解:cd

1.命令作用 改变当前工作目录(change directory) 2.命令语法 Usage: cd [-L|[-P [-e]]] [dir] 3.参数详解 -L‌&#xff0c;当目标路径是符号链接时&#xff0c;强制使用符号链接&#xff0c;这是一个默认选项。-P‌&#xff0c;使用物理路径代替符号链接。-e‌&#xff0…

创建型模式-生成器模式

生成器模式是创建型模式的一种&#xff0c;生成器模式主要是解决在大类创建对象初始化的复杂的问题。将一个复杂类的创建拆分成几个部分&#xff0c;再根据具体需求创建初始对象&#xff0c;而不必每次都创建所有的部分。在需要创建包含有不同内容的对象的时候&#xff0c;可以…

系统日志优化---自定义springboot-starter日志组件供各个服务使用

在优化项目时发现各个微服务都有各自的接口调用日志逻辑&#xff0c;比如每个服务都定义一个aop类拦截&#xff0c;十分冗余&#xff0c;其实是可以做成starter被各个服务引用使用&#xff0c;前提要先了解一下springboot自动装配原理 创建springboot工程&#xff0c;如果是jdk…

Android V QCOM GPS | APN for LocationService

问题 在高通平台上验证 GPS 功能流程时候,block 在 APN 数据库的查询。经查,发现高通有内部实现的 LocationService(aosp源码和mtk都没有的类) 包含查询 TelephonyProvider 数据库的逻辑,直接原因是查询到 APN Protocol 不符合预期,直接fail。 关于 Android APN 数据列的…

计算机网络之---有线网络的传输介质

1. 双绞线&#xff08;Twisted Pair Cable&#xff09; 定义&#xff1a;双绞线是一种由两根绝缘铜线按一定螺旋方式绞合在一起的传输介质。常见的类型包括非屏蔽双绞线&#xff08;UTP&#xff09;和屏蔽双绞线&#xff08;STP&#xff09;。特点&#xff1a; UTP&#xff1a…