修改获取用户并推送消息的功能

2017-12-27

工作遇到的小问题

根据筛选条件获取用户id存入redis
启动异步脚本,根据id获取全部信息(令牌之类)分批推送

问题一:获取用户id仍然耗时过长,采用异步脚本获取,可以直接获取全部信息

问题二:获取数据耗时长,推送快,导致下一批数据进入时异步脚本已经全部关闭
解决方式:动态维护进程数
结果:不够理想
不能优化好数据存入和消息推送的速度协调性,导致脚本的开关过于频繁,内部的循环不能很好利用

问题三:合理使用switch合并方法,去除三种推送的重复代码
结果:不够理想
符合业务逻辑将导致代码冗余,代码简约时业务逻辑有瑕疵

注意:异步脚本必须采用命令行形式启动
命令行的参数不能太复杂,需存入redis供跨进程交互

分析记录

一、现有方式
推送对象拉取速度小于脚本推送时间,导致推送中断,推送对象剩余(之前不会出问题吗)
完美情况下仍旧存在推送数量的上限

二、获取完整推送对象后再推送
内存占用大,整体延时高
不清楚推送消息的及时性需要满足到什么程度?

三、动态控制进程数量
目前考虑存在redis中,异步维护进程数量的变量会冲突吗?
命令行获取?
每个进程循环数少,使用效率低,进程开关频率相对高

四、每拉取一次开启固定脚本数
消息延迟比一次多开慢
推送速度快会导致循环数低
推送速度慢进程数量激增
不会出现推送对象剩余

五、按需开启脚本,一次循环pop存数组
不会浪费进程但存在固定的延时代价

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概...
    kelgon阅读 61,234评论 23 625
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,870评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • 读完,给我的感觉和《瓦尔登湖》很像。不同的是,前者是一个人,后者是一个家庭。还穿插着孩子的成长,还有打猎的故事。 ...
    duoduo_four阅读 132评论 0 0
  • 轻松笑话一则: 每次吃完饭,儿子首先举起两个大拇指,会说:"妈妈做饭真香,妈妈炒菜最好吃了。"老公会说:"很好,很...
    紫陌红尘路阅读 261评论 1 1