接上一节的继续,上一节说过了因近期接手其他部门项目,发现诸多问题.关于mysql 并发 处理已经讲过,没有看过的同学可以去这里:http://xytong.cc/archives/87 。

本节讲讲如何正确地处理消息队列,此项目后台进程消息传递用的memcacheq,出现了很多问题列举如下:

1.将诸多业务类型的数据(例如推送微信模板消息,硬件设备上报错误处理,用户操作逻辑)都塞到同一个队列里,即用同一个key值进行存储。但有些业务例如:用户操作硬件设备的处理逻辑是不能并发处理的,必须按顺序进行。有些业务是可以并发处理的,例如推送微信模板消息是可以进行并发处理的。

导致:后台必须你使用单进程单线程处理,晚上用户访问量大的时候,后台处理很缓慢,担心并发出错还不能多开进程去处理,消息队列堵塞特别严重(后台取出数据处理的速度小于外部进程插入的速度)。

2. memcacheq 这种消息队列产品缺点还是不少的:

小众使用,已经停止维护了目测(最后一次版本更新08年)

api几乎没有,数据存取只有get set,查询队列也没有官方工具,居然还要通过telnet查看统计数据。我个人是毕竟失望的对此,比如:可以选择或从头或从尾部读取、队列数据查询内容,一次取出n条数据,阻塞模式查询数据(省得应用层程序要频繁询问队列有无数据然后sleep,再不停进行上述循环,浪费硬件资源 ) 等等统统没有,google 搜索也没有找到有效文档。

redis 在这消息队列方面完全可以满足我的需求嘛,于是费了一番尽力,将消息队列由memcacheq 切换至redis,目前线上产品已经使用redis一周运行稳定

替换前已经做好了如下方案:

1.分析队列处理的业务数据,将之完全剥离开,一个业务一个队列,这样的好处是:

1.1.平日数据量最大的是微信模板消息,开多个进程去并发处理就是了。

1.2.按业务分开后,同一个业务处理不会因其他业务处理阻塞而推后执行,这个在之前也是频频出现的。

2.替换要分布进行的,先将数据插入切换至redis,用备机后台进程处理redis 队列。

旧的数据依旧在memcacheq,依然在老机器后台进程处理,待memcacheq数据处理完毕,则关闭memcacheq,停止使用备机,这样即实现了消息队列切换平稳过渡。

3.用brpop,减少后台进程查询redis队列频率。我这里设置的是超时3秒,brpop 超时2s,然后继续while循环进行brpop。

4.应用层的切换还是比较简单的,只需要把以前的set,get方法调用重新换成调用redis接口就行了,一定要做错误日志记录、检测报警,结构性的切换很有可能会忽略掉一些地方,这时候就要从日志种寻找蛛丝马迹了。

centos 7 +redis 3.26安装配置管理

redis安装:

比较简单的,去官网下载压缩包解压直接make就可以了。

1.wget http://download.redis.io/releases/redis-3.2.6.tar.gz

2.tar xzf redis-3.2.6.tar.gz

3.cd redis-3.2.6

4.make

5.make test 测试是否编译成功

centos 7安装可能会遇到以下问题:

1.error: jemalloc/jemalloc.h: No such file or directory

异常原因:部分编译依赖或原来编译遗留出现的问题

解决方案:make distclean。清理一下,然后再make。

2.. 在make成功以后,需要make test。在make test出现异常。

couldn’t execute “tclsh8.5”: no such file or directory

异常原因:没有安装tcl

解决方案:yum install -y tcl。

REDIS配置:

我将redis编译完毕所需的文件都放入了/usr/local/redis/目录

2018.09.18补充:

将程序文件移至/usr/local/redis 目录

cd /usr/local/src/redis/redis-4.0.11/src

cp redis-cli redis-server redis-sentinel redis-benchmark redis-check-aof redis-trib.rb

/usr/local/redis

将配置文件移至/usr/local/redis 目录

cp /usr/local/src/redis/redis-4.0.11/redis.conf /usr/local/redis

redis 管理命令

启动redis:/usr/local/redis/redis-server /usr/local/redis/redis.conf

关闭redis: /usr/local/redis/redis-cli -h 192.168.100.32 -p 6379 -a password shutdown

客户端登陆:/usr/local/redis/redis-cli -h 192.168.100.32 -p 6379 -a password

修改redis.conf配置

1.logfile ,pid(pidfile),dir(dir)路径,redis启动用户要有可写权限

2.timeout 客户端连接超时 60s

3.启动ip修改为:bind 0.0.0.0

4.守护进程方式启动 :daemonize yes

5.根据业务类型重要性修改保存的频率 ,例如: save 60 1

正式环境部署还需要做以下几点:

1.必须用普通用户身份运行redis

添加redis  启动用户: user add redis (必须有/bin/bash权限,否则不能su切换)

2.开机自启动

vim /etc/rc.local

添加一行: su – redis -c “/usr/local/redis/redis-server /usr/local/redis/redis.conf “

注意:

记得替换” – 为 半角字符

作者: 白金马桶

mysql消息队列推送到redis_消息队列redis部署,以及在实际场景中使用 – 小雨点来了...相关推荐

  1. RabbitMQ(九):RabbitMQ 延迟队列,消息延迟推送(Spring boot 版)

    应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款打给商家,这个过程持 ...

  2. RabbitMQ 延迟队列,消息延迟推送

    应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款打给商家,这个过程持 ...

  3. flask websocket json_Win10环境下使用Flask配合Celery异步推送实时/定时消息/2020年最新攻略...

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_163 首先得明确一点,和Django一样,在2020年Flask 1.1.1以后的版本都不需要所谓的三方库支持,即Flask-Ce ...

  4. 快递企业如何完成运单订阅消息的推送

    经常网购的朋友,会实时收到运单状态的提醒信息,这些提醒信息包括微信推送,短信推送,邮件推送,支付宝生活窗推送,QQ推送等,信息内容主要包括快件到哪里,签收等信息的提醒,这些友好的提醒信息会极大的增强购 ...

  5. 突破微信小程序模板消息的推送限制

    "模版消息"是小程序非常重要且可主动触达用户的一种能力.爱鲜蜂小程序通过"模版消息",建立一套用户唤醒机制,达到提升用户复购率的目的.小打卡小程序的近30天访问 ...

  6. netty服务器定时发送消息,netty+websocket+quartz实现消息定时推送

    netty+websocket+quartz实现消息定时推送&&IM聊天室 在讲功能实现之前,我们先来捋一下底层的原理,后面附上工程结构及代码 1.NIO NIO主要包含三大核心部分: ...

  7. Swift - 本地消息的推送通知(附样例)

    使用UILocalNotification可以很方便的实现消息的推送功能.我们可以设置这个消息的推送时间,推送内容等. 当推送时间一到,不管用户在桌面还是其他应用中,屏幕上方会都显示出推送消息. 1, ...

  8. Docker最全教程之使用.NET Core推送钉钉消息(二十)

    前言 上一篇我们通过实战分享了使用Go推送钉钉消息,由于技痒,笔者现在也编写了一个.NET Core的Demo,作为简单的对照和说明. 最后,由于精力有限,笔者希望有兴趣的朋友可以分享下使用CoreR ...

  9. java消息推送怎么实现_PHP实现的消息实时推送功能

    本文实例讲述了PHP实现的消息实时推送功能.分享给大家供大家参考,具体如下: 入口文件index.html <!DOCTYPE HTML> <html> <head> ...

最新文章

  1. 【机器学习基础】常见二分类损失函数、距离度量的Python实现
  2. ASP.NET中下载文件的几种方法
  3. “新闻”频道“最新更新”有问题吗?
  4. Mysql中怎样创建和使用存储过程
  5. bp神经网络优化算法对比,提高bp神经网络精度
  6. Github Action 指南
  7. (BMVC-2021)GaitMask:基于掩码的步态识别模型
  8. JQUERY冻结table行或列js
  9. 【程序设计与实践】实验四:自动寄存柜(C语言)
  10. 算法设计与分析 SCAU11083 旅游背包(优先做)
  11. php设计网站课程报告,在线课程网站设计与实现-开题报告
  12. IE浏览器验证码不刷新
  13. mysql求回购率_用户行为分析——回购率、复购率(SQL、Python求解)
  14. python里float什么意思_Python中的float是什么意思,小白求答?
  15. 图片文档扫描矫正处理(手机扫描仪),OCR识别,图片修改库整合
  16. 学生信息管理系统——用户登录模块问题篇
  17. 计院生活--第一章 卧薪尝胆
  18. 在vs2017上如何创建一个静态库
  19. 项目学习 —— 图书商城后台管理
  20. poi处理word内容的公式_利用poi操作word文档

热门文章

  1. codeforces+contest985C. Liebig's Barrels+greedy
  2. SPSS for Mac 26 岭回归及语法(含 include 安装路径)
  3. 什么是电子计算机NXI并行线,并行ADC的原理是什么?流水线ADC与其它ADC有何区别?...
  4. 用python程序玩黄金矿工——”指哪抓哪“
  5. codevs 2669 简单的试炼
  6. java实现LL(1)文法分析,if语句识别,赋值语句识别
  7. 如何让Linux系统管理变得更轻松
  8. 软件、应用、程序概念辨析
  9. 金点工作室制作手札 :《圣剑英雄传之英雄救美》[ZT]
  10. 2015:【20NOIP提高组】微信步数