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 “

注意:

记得替换” – 为 半角字符

394ca6af6e9f2d8e239b9d5ba1c3f56b?s=42&d=mm&r=g

作者: 白金马桶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值