定义用户信息和用户包裹
下表展示了游戏中用于表示用户信息和用户包裹的结构:用户信息存储在一个散列里面,散列的各个键值对分别记录了用户的姓名、用户拥有的钱数等属性。用户包裹使用一个集合来表示,它记录了包裹里面每件商品的唯一编号。
键名: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块钱
既然我们已经知道了实现商品买卖市场所需的数据结构,那么接下来该考虑如何实现市场的商品上架功能了。