我在实际项目中对redis的任务队列的使用

(描述不对的地方望包涵指正)任务队列是讲要处理的任务放在队列中按顺序执行,可以将耗时的或者是不需要前端知道的任务与业务分离开来,在我看来主要有2个方面的好处 

  1.增强了界面的友好型,就是用户感觉也操作起来更快了,下面会有详细的介绍

  2.增强了后端应用服务器的吞吐量,假如我们的前端服务器是nginx,一个牛逼的服务器,大家可以自行了解它的机制,在我看来它是一个很厉害的吃货,它不会管你的胃(应用服务器)是否很能不能装食物,只要有食物到嘴边它就吃(我发现了一个冷笑话,尼玛吃起东西来感觉像是异步的)。nginx是单进程的,生成环境中根据cpu来看2个或者多个进程,如果有2个很耗时的操作同时暂用了这2个进程,那么其它的进程就会阻塞了(所有的食物都堵在了食管,胃还在分泌胃酸消化这个2坨东西),所以可以考虑将这部分耗时操作写成异步代码,但是异步代码只能提高吞吐量而不能给用户非一般的操作体验而且异步代码不容易驾驭(考虑tornado),看可不可以使用redis的队列吧


目前项目中在2个地方用到了redis得队列

1.用户注册激活邮件发送

    我们具体分析一下这个需求,发送邮件这个需求对于用户来说不需要那么强的实时性,因为用户还要去打开邮件或者登录邮件,等待几秒钟都是可以接受的,但用户注册之后完全可以在前端提示用户“邮件已发送”,不需要等待邮件真正发送之后再去提示,而是发到任务队列中去处理,文字有点多 上代码

sessiondb.lpush("mailQueue",i["phoneNum"]+":"+i["mail"])

前面大家不要纠结只要注意lpush的函数就可以了(我用的是Python的redis的模块),lpush(redis也是lpush)也是操作队列,顾名思义,向列表的左侧push一个任务到redis中去,mailQueue就是这样的了["137222":"88@qq.com"]

然后单独启动一个python实例来处理队列任务

def handlerMailQueue():

      toMail = sessionDB.brpop("mailQueue",timeout=0)

      toMail = toMail[1].split(":")

try:

       sendMail(toMail[0],toMail[1])

       handlerMailQueue()

except Exception as e:

        raise ""

if __name__ =="__main__":

    handlerMailQueue()

同样大家不用关心sessionDB或者sendmail这些东西,自己写。注意brpop,从mailQueue的左侧取出任务来,timeout=0表示会一直阻塞住,直到队列中有数据了才结束,发送完邮件再接着阻塞监听。

你也可以写死循环来监听,或者有什么更好的办法来处理  我只能用笨办法了,如果大家对服务器要求高  可以做分布式的  


2.调用php脚本执行相关函数,实现同步注册

     在这里调用php主要是为了让我们的网站与discuz做同步实现单点登录,会有一篇文章专门讲解如何利用ucenter实现不同网站(nodejs,java,python)与discuz的单点登录,我们分析一下同步注册,同步注册就是在我们网站如果完成了注册,同时调用php脚本把数据存到discuz的mysql数据库中去,对于这一步也是不用与前端交互的  存完了没有和用户没有关系。

这里的过程和上述方式一样最终监听取出,执行php脚本,把username,password,email存到discuz数据库

os.popen('php /usr/local/developer-wf/uc_client/php_pro/register.php '+bbs_user["username"]+' '+bbs_user["password"]+' '+bbs_user["email"])

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容