![3ffb41dc35dc38923256d36641953861.png](https://i-blog.csdnimg.cn/blog_migrate/ac86574ed60c7842e9fbc3e199fd9ff9.jpeg)
作者:郝赟
前言
最近在平台推送业务的特性开发中,使用到了MySQL的"ON DUPLICATE KEY UPDATE"语法,这里结合业务场景对该语法的使用做个介绍。
业务场景
使用平台的推送服务之前,需要注册设备。对于终端的注册信息,主要有玩家的user_id、对应于某渠道的客户端包名bundle_id、以及其它相关信息,例如当前设备的推送类型(FCM、APNS、Baidu等)、设备的device_token、依托于AWS推送服务的Amazon 资源名称(ARN)、 该终端设备对应玩家的默认语言、所在国家或地区等信息。
不同游戏终端设备的注册逻辑大同小异,基本都是在玩家每次上线时由游戏服务器向平台的推送服务发起注册请求。如果当前终端设备之前注册过,则只是更新该终端设备的其它注册信息(例如推送渠道更改、设备device_token变更、默认语言、国家地区信息的变更等);假若当前终端设备未注册过,就写入一条新的记录。
对于iOS、应用宝以外的渠道下载的客户端(以bundle_id作区分),原则上玩家账号(user_id)是可以互通的。也就是说,某个游戏中同一个user_id可以对应多个bundle_id,一条终端设备的注册记录以自增id作为PRIMARY KEY,同时以(user_id, bundle_id)