1、针对发送客服消息,模板消息,短信消息或者图片海报的时候,首先检测下发送用户对象的人数,如果超过300以上,建议增加子进程,这样可以有效减少发送时间,提高发送效率,10W+个用户对象,如果使用一个方法发送,不会发送2个小时就能解决问题,这时可以考虑增加子进程的方法,然后呢,还需要考虑到如果突发状况,导致脚本停止了,但发送过的用户又不能重新再发送一次,这时就可以使用到 redis 的集合 sadd 方法,同时设置好过期时间 expire,当然还需要考虑什么样的数据添加到集合中,推荐使用用户唯一标识的数据,譬如 openid,unionid。
2、客户信息是怎么来的,查询查询数据库,但是我们要每发一次就查询一次吗?这无疑增加数据库压力,倒不如直接一次性查出来或者分块查出,将数据放到 redis 队列里面,lpush 方法,然后每发一次,就出队列,rpop 方法。
3、如果需要记录发送结果,同样的可以将结果信息以 json 字符串的格式放到 redis 队列里,等到数据库空闲的时候在执行数据写入。
4、参考上面所说,退款,退金币,退钱包等业务需求,同样记录是否退还过相应的订单,如过退还过就无需退还。