mysql消息队列推送到redis_消息队列redis部署,以及在实际场景中使用 – 小雨点来了...
接上一节的继续,上一节说过了因近期接手其他部门项目,发现诸多问题.关于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部署,以及在实际场景中使用 – 小雨点来了...相关推荐
- RabbitMQ(九):RabbitMQ 延迟队列,消息延迟推送(Spring boot 版)
应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款打给商家,这个过程持 ...
- RabbitMQ 延迟队列,消息延迟推送
应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款打给商家,这个过程持 ...
- flask websocket json_Win10环境下使用Flask配合Celery异步推送实时/定时消息/2020年最新攻略...
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_163 首先得明确一点,和Django一样,在2020年Flask 1.1.1以后的版本都不需要所谓的三方库支持,即Flask-Ce ...
- 快递企业如何完成运单订阅消息的推送
经常网购的朋友,会实时收到运单状态的提醒信息,这些提醒信息包括微信推送,短信推送,邮件推送,支付宝生活窗推送,QQ推送等,信息内容主要包括快件到哪里,签收等信息的提醒,这些友好的提醒信息会极大的增强购 ...
- 突破微信小程序模板消息的推送限制
"模版消息"是小程序非常重要且可主动触达用户的一种能力.爱鲜蜂小程序通过"模版消息",建立一套用户唤醒机制,达到提升用户复购率的目的.小打卡小程序的近30天访问 ...
- netty服务器定时发送消息,netty+websocket+quartz实现消息定时推送
netty+websocket+quartz实现消息定时推送&&IM聊天室 在讲功能实现之前,我们先来捋一下底层的原理,后面附上工程结构及代码 1.NIO NIO主要包含三大核心部分: ...
- Swift - 本地消息的推送通知(附样例)
使用UILocalNotification可以很方便的实现消息的推送功能.我们可以设置这个消息的推送时间,推送内容等. 当推送时间一到,不管用户在桌面还是其他应用中,屏幕上方会都显示出推送消息. 1, ...
- Docker最全教程之使用.NET Core推送钉钉消息(二十)
前言 上一篇我们通过实战分享了使用Go推送钉钉消息,由于技痒,笔者现在也编写了一个.NET Core的Demo,作为简单的对照和说明. 最后,由于精力有限,笔者希望有兴趣的朋友可以分享下使用CoreR ...
- java消息推送怎么实现_PHP实现的消息实时推送功能
本文实例讲述了PHP实现的消息实时推送功能.分享给大家供大家参考,具体如下: 入口文件index.html <!DOCTYPE HTML> <html> <head> ...
最新文章
- 【机器学习基础】常见二分类损失函数、距离度量的Python实现
- ASP.NET中下载文件的几种方法
- “新闻”频道“最新更新”有问题吗?
- Mysql中怎样创建和使用存储过程
- bp神经网络优化算法对比,提高bp神经网络精度
- Github Action 指南
- (BMVC-2021)GaitMask:基于掩码的步态识别模型
- JQUERY冻结table行或列js
- 【程序设计与实践】实验四:自动寄存柜(C语言)
- 算法设计与分析 SCAU11083 旅游背包(优先做)
- php设计网站课程报告,在线课程网站设计与实现-开题报告
- IE浏览器验证码不刷新
- mysql求回购率_用户行为分析——回购率、复购率(SQL、Python求解)
- python里float什么意思_Python中的float是什么意思,小白求答?
- 图片文档扫描矫正处理(手机扫描仪),OCR识别,图片修改库整合
- 学生信息管理系统——用户登录模块问题篇
- 计院生活--第一章 卧薪尝胆
- 在vs2017上如何创建一个静态库
- 项目学习 —— 图书商城后台管理
- poi处理word内容的公式_利用poi操作word文档
热门文章
- codeforces+contest985C. Liebig's Barrels+greedy
- SPSS for Mac 26 岭回归及语法(含 include 安装路径)
- 什么是电子计算机NXI并行线,并行ADC的原理是什么?流水线ADC与其它ADC有何区别?...
- 用python程序玩黄金矿工——”指哪抓哪“
- codevs 2669 简单的试炼
- java实现LL(1)文法分析,if语句识别,赋值语句识别
- 如何让Linux系统管理变得更轻松
- 软件、应用、程序概念辨析
- 金点工作室制作手札 :《圣剑英雄传之英雄救美》[ZT]
- 2015:【20NOIP提高组】微信步数