交易平台数据实时刷新方案

交易平台数据实时刷新方案

需求

挂单数据、成交数据、用户余额实时刷新

实现

关键:

WebSocket+Redis

思路:

使用WebSocket维持长链接,确保数据实时传输。并在Redis中维护一个挂单的价格-数据列表,以较快的频率推送给用户。同时,在用户挂单时,浏览器主动获取挂单、成交和用户余额数据。

技术细节

以市场 btc_cny 为例。

需要在Redis中维护两个列表,btc_cny_buy , btc_cny_sell

每个列表包含以下key/value对,价格/数据。

列表数据在以下操作时更新:

  1. 挂单
  2. 撤销
  3. 成交

更新操作:

  1. 判断 btc_cny_buy是否存在,不存在则创建
  2. 查找 价格对应的key
  3. 价格key存在则更新,不存在则直接创建

需要对数量为0的价格key做清除处理

推送给浏览器的数据:

定时推送+浏览器主动获取

  1. 从Redis中获取btc_cny_buy
  2. 过虑掉数量为0的价格key
  3. 排序
  4. 截取前N个

用户身份认证

  1. 建立WebSocket连接时浏览器发送cookie中的PHPSESSINOID
  2. 服务器根据sessionid读取session目录下对应的session文件
  3. 正则解析文件内容,获取用户ID和username。有可能用户处于未登录或登录失败的状态。

页面展示

  1. 数据差异化处理

技术难点

  1. 列表的初始化,即创建一个包含所有现有价格key的列表

    解决思路:从数据库取出所有唯一性价格及其数量,推入列表。

  2. 数据一致性,即保证列表中的数据与数据库中的数据一致

    要求每次对数据的操作都要精确无误。

Leave a Comment

豫ICP备19001387号-1