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

问题描述

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

问题分析

出现这种的缘由在于如下两点:服务器

  • 服务器有点卡,没有来得及在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和复用链接等功能

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

相关文章
相关标签/搜索