定义用户信息和用户包裹
下表展示了游戏中用于表示用户信息和用户包裹的结构:用户信息存储在一个散列里面,散列的各个键值对分别记录了用户的姓名、用户拥有的钱数等属性。用户包裹使用一个集合来表示,它记录了包裹里面每件商品的唯一编号。
| 键名:user:17 | 存储类型:hash |
|---|---|
| name | Frank |
| funds | 43 |
| 键名:inventory:17 存储类型:set |
|---|
| ItemL |
| ItemM |
| ItemN |
| 键名:user:27 | 存储类型:hash |
|---|---|
| name | Bill |
| funds | 125 |
| 键名:inventory:27 存储类型:set |
|---|
| ItemO |
| ItemP |
| ItemQ |
商品买卖市场的需求非常简单:一个用户(卖家)可以将自己的商品按照给定的价格放到市场上进行销售,当另一个用户(买家)购买这个商品时,卖家就会收到钱。另外,本节实现的市场只根据商品的价格来进行排序,稍后章节将介绍如何在市场里面实现其他排序。
为了将被销售商品的全部信息都存储到市场里面,我们会将商品的ID和卖家的ID拼接起来,并将拼接的结果用作成员存储到市场有序集合里面,而商品的售价则用作成员的分值。通过将所有数据都包含在一起,我们极大简化了实现商品买卖市场所需的数据结构,并且,因为市场里面的所有商品都按照价格排序,所以针对商品的分页功能和查找功能都可以很容易地实现。
下表展示了一个只包含数个商品的市场例子:
| 键名:market | 存储类型:zset |
|---|---|
| 正在销售的商品.物品的拥有者 | 物品的价格 |
| ItemA.4 | 35 |
| ItemC.7 | 48 |
| ItemE.2 | 60 |
| ItemG.3 | 73 |
上表表示的商品买卖市场,第一行数据表示:用户4正在销售商品Item,售价为35块钱
既然我们已经知道了实现商品买卖市场所需的数据结构,那么接下来该考虑如何实现市场的商品上架功能了。