微信公衆號開發推送事件排重

問題描述

在處理用戶領卡的推送的時候,咱們的數據庫對同一個新的用戶,會出現兩條數據,好比兩條用戶,兩條用戶領卡數據數據庫

問題分析

出現這種的緣由在於如下兩點:服務器

  • 服務器有點卡,沒有來得及在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和複用鏈接等功能

好了,就先到這裏了,記錄下來以便下次查閱,若是對於你也有幫助的話,那真是最好不過的了微信開發

相關文章
相關標籤/搜索