微信公众号开发推送事件排重

问题描述

在处理用户领卡的推送的时候,我们的数据库对同一个新的用户,会出现两条数据,比如两条用户,两条用户领卡数据

问题分析

出现这种的原因在于以下两点:

  • 服务器有点卡,没有来得及在5秒之内回复微信服务器,导致微信服务器重发请求
  • 虽然在插入数据之前有所检查有无重复数据,但是可能服务器很卡,在检查的时候,前一条请求的数据还没有插入数据库
处理方法

参考微信开发文档,利用FromUserName + CreateTime排重,将其作为一个key,存放在memcached里面,然后每次有推送或者消息来得时候,先去判断一下是否存在,如果存在,表示是重复推送,直接return空串,否则表示是第一次推送,将其作为一个key,简要代码如下:

mc = memcached_wrapper.getMemcached()
FromUserName = self.decrypt_msg.find("FromUserName").text
CreateTime = self.decrypt_msg.find("CreateTime").text
mc_key_str = Util.unicode2str(FromUserName + CreateTime)
mc_value_str = mc.get(mc_key_str)
if mc_value_str:
    mc.disconnect_all()
    return ""
else:
    mc.set(mc_key_str, 1, 60)
    mc.disconnect_all()
# 备注
# unicode2str将unicode字符串转化为bytes串
# memcached_wrapper一个处理memcached的py文件,主要作用是连接memcached和复用连接等功能

好了,就先到这里了,记录下来以便下次查阅,如果对于你也有帮助的话,那真是最好不过的了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值