MQ、缓存、Redis、celery异步任务
文章平均质量分 53
1
蓝绿色~菠菜
对技术有一颗敬畏和严谨之心,对代码有精益求精的精神。像养小孩和女朋友一样,精心照料和打扮。想清楚了再干,坚持高标准,Design for future!
展开
-
Redis和RabbitMQ做消息队列的区别
一、RabbitMQRabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。二、RedisRedis是一个Key-Value的NoSQL数据库,Redis的设计是用来做缓存的,它是一个内存数据库,不...原创 2019-11-22 11:09:25 · 4287 阅读 · 1 评论 -
Python实现RabbitMQ的各种用法
以python语言为例演示rabbitmq的常用功能。原创 2022-08-10 16:34:47 · 1891 阅读 · 0 评论 -
缓存一致性问题解决方案
四种方案:先写缓存,再写数据库(差)先写数据库,再写缓存(一般)先删缓存,再写数据库(能接受)先写数据库,再删缓存(比较优秀)原创 2022-04-07 17:25:26 · 13373 阅读 · 8 评论 -
python对接kafka
python对接kafka有两个常用库:kafka-python,pykafka,前者github star较多,所以选用了前者。生产者:from kafka import KafkaProducerimport jsonimport datetimetopic = 'test'producer = KafkaProducer(bootstrap_servers='127.0.0.1:9092', value_serializer=lambda m: json.dumps(m).enc原创 2021-11-08 11:20:35 · 5249 阅读 · 0 评论 -
Docker单机部署kafka
部署zookeeper:docker pull zookeeperdocker run -d --name zookeeper -p 2181:2181 -t zookeeper部署kafka:docker pull bitnami/kafkadocker run -d --name kafka \-p 9092:9092 \-e KAFKA_BROKER_ID=0 \-e KAFKA_ZOOKEEPER_CONNECT=172.16.0.78:2181 \-e KA原创 2021-11-04 16:34:18 · 2386 阅读 · 0 评论 -
初识Kafka
Kafka最早是linkedin公司用于日志处理的分布式消息队列。现在它的功能远不止消息队列这么简单。根据Kafka官网的定义,Kafka是一个分布式的流处理平台。它拥有以下三大核心功能:发布和订阅数据流,类似于传统消息队列(RabbitMQ,RocketMQ)的功能 以容错的方式存储数据流的功能 实时处理数据流的功能为了支持以上的三大核心功能,Kafka拥有四组核心API,包括:Producer API:用于发送数据。 Consumer API:用于消费数据。 Streams API:用翻译 2021-11-04 16:12:01 · 225 阅读 · 0 评论 -
celery同步执行任务(在项目中debug任务)
配置文件中设置:CELERY_ALWAYS_EAGER = True一担这样配置,celery将掠过一切调度机制,直接运行你的task代码。好处是你可以在不启动worker或消息中间件的情况下执行你的任务或者debug你的任务。原创 2021-05-14 10:24:33 · 1546 阅读 · 0 评论 -
自己实现一个简单的Celery来透析celery的本质
已经有很多文章来描述Celery的用法与简单原理,本篇文章也会简单提及,但不会费太多笔墨。需注意,这里不会去解读Celery的源码,其源码具有很多工程细节,比较复杂,这里只是从其本质出发,简单的实现一个玩具Celery,这个玩具Celery在稳定性、效率等方面当然不能与Celery相比,但可以很好的理解Celery大体是怎么实现的。本文讲究的是「形离神合」,与Celery实现细节不同,但本质原理相同。那我们开始吧!Celery的概念与原理Celery 5 个关键的概念,弄明白,就大致理解 C原创 2021-05-17 10:38:39 · 333 阅读 · 0 评论 -
Celery Task中一些有用的回调函数
我们编写的每个task其实都是celery.app.task.Task的实例,Task里面给我们提供了很多有用的方法,比常用的delay、apply_async、AsyncResult等,下面再介绍几个比较实用的方法。1、on_failure异步任务执行失败时,会执行这个回调方法。如果你想实现一个 异步任务执行失败时,需要发出告警邮件通知的功能,重写这个函数就可实现。2、on_success异步任务执行成功时,会执行这个回调方法。3、on_retry异步任务尝试重试时,会执行原创 2021-05-14 10:23:33 · 4057 阅读 · 0 评论 -
Celery 任务失败重试机制
Celery提供任务失败重试机制。比如一个发送邮件的异步任务,可能遇到超时问题,则应该重试执行。下面给个例子:@celery_app.task(bind=True)def send_email(self): try: print('开始执行发送邮件异步任务') raise IOError # 主动抛出异常,模拟发生错误 except Exception as e: """ retry的参数可以有:原创 2021-01-13 14:21:25 · 3083 阅读 · 1 评论 -
关于用docker启动celery来执行异步任务时任务丢失问题
celery在执行schedule类型任务时,有个中断回传机制:celery worker接到任务后,如果worker被中断了(ctrl+c),那么这个这个任务会重新回到队列中,但你强制中断worker(kill -9),则不会再回到队列中。(具体可以参考Celery + Redis交互过程探究)当用docker启动celery时,也会遇到同样的问题:强制退出容器时(docker kill),会导致任务丢失,即使用(docker stop),也会导致任务丢失。这时候你可以研究一下docker的sto原创 2020-12-31 16:18:48 · 2412 阅读 · 0 评论 -
利用Redis实现排行系统
利用redis的list和zset数据类型都可以实现排行榜系统。区别:list本身没有排序功能,需要外部程序排序之后存储到list中,通过list的LRANGE key start stop命令实现分页数据或者前50的排名或者最新前5条数据。 zset本身有排序机制,不需要外部程序做排序。 list适合做定时排序,如每天的销量排行。 zset适合做实时计算排行,如玩家分数排行。 zset比list占用更大的内存空间。list类型list类型是简单的字符串列表,按照插入顺序排序。每个列表原创 2020-11-07 13:03:04 · 1351 阅读 · 0 评论 -
记录一个celery异步任务丢失问题
在做本地开始时,做generate_offer异步任务中,异步任务莫名其妙的丢失,10次操作可能有2次能正常执行异步任务。不知为何。系统环境:web服务:大连windows系统redis服务:香港linux系统 + redis服务的docker版而同样的代码,我将web服务做成docker镜像在使用异步任务则不会丢失。系统环境:web服务:香港linux系统 +...原创 2019-11-06 13:44:37 · 3398 阅读 · 0 评论 -
django配置celery中的日志
首先,说明一点:django配置文件中的LOGGING 只是针对django中的views、API起作用,对celery不起作用,也就是说celery不能使用django的日志记录器所以,如何记录celery日志呢?只需在tasks.py中引入celery自带的日志记录器from celery.utils.log import get_task_loggerlogger = get_ta...原创 2019-06-17 15:39:00 · 7028 阅读 · 2 评论 -
django配置celery执行异步任务和定时任务
需求:django中定时给用户推送消息、或者定时更新数据库的某个字段内容本文介绍如何在django中使用celery和定时任务,以及配置celery日志文件一、安装 pip install django-celery pip install django-redis pip install celery pip install redis django-...原创 2019-06-17 15:25:37 · 7240 阅读 · 2 评论 -
Django配置celery
本文介绍django中如何使用celery,与常规的配置方法有所不同,本文是使用集中管理的方式配置celery,这样便于维护与管理,又不与django配置相混淆。一、安装 pip install django-celery pip install django-redis pip install celery pip install redis注意版本之间的兼...原创 2019-06-17 14:31:21 · 3225 阅读 · 0 评论 -
celery异步任务重复执行的解决办法
celery使用redis作为broker的话,apply_async的异步任务如果执行时间是延迟超过1小时的话,celery会重复发布任务,会导致任务重复执行。如:update_DATenc.apply_async((1, 2), countdown=8400),update_DATenc任务在8400秒后执行。这将导致在8400秒内,每隔一小时触发一次update_DATenc任...原创 2020-05-08 13:24:24 · 4223 阅读 · 0 评论 -
Redis连环问
(摘自今日头条)今天,我不自量力的面试了某大厂的java开发岗位,迎面走来一位风尘仆仆的中年男子,手里拿着屏幕还亮着的mac,他冲着我礼貌的笑了笑,然后说了句“不好意思,让你久等了”,然后示意我坐下,说:“我们开始吧。看了你的简历,觉得你对redis应该掌握的不错,我们今天就来讨论下redis……”。我想:“来就来,兵来将挡水来土掩”。Redis是什么面试官:你先...原创 2020-04-08 11:09:35 · 273 阅读 · 0 评论 -
Celery + Redis交互过程探究
过程不贴上来了,直接看结论:1、当发起一个 task 时,会向 redis 中插入以"celery"为key一条列表类型的记录,。2、如果这时有正在待命的空闲 worker,这个 task 会立即被 worker 领取。3、如果这时没有空闲的 worker,这个 task 的记录会保留在"celery" key 中。4、如果task被worker领取,这时会将这个 task 的记录从 k...原创 2020-03-24 10:42:51 · 3782 阅读 · 0 评论 -
Redis基本操作
键命令 .查找键/所有:keys name /keys * (支持正则) .判断是否存在:exists name .查看值类型:type key .删除键及值:del key1 key2… .设置过期时间:expire key 40 .查看有效时间:ttl key 字符串 .增加、修改: set name laowang .过期时间设置:set...原创 2019-11-22 13:07:12 · 474 阅读 · 0 评论