(1) from云风的blog 开发笔记(2)
数据库采用的是 Redis ,提供基本的 Key-Value 储存功能,没有层级表。如果需要两层结构,可以在 Value 里保存一组 Hashes 。
可以按 Key 的前缀把数据分到不同的位置。例如,account 信息是最可能独立出去的,因为它和具体游戏无关。
用户系统的用户名,在数据库中的唯一标识是一个 uid ,用户应该允许修改登陆名(用户很可能更换 email)。
用户的身份识别是用 id 来定位的。在数据库中就应该有如下几组 Key :
account:count id ;是一个计数器,可以用来生成唯一 id 。
account:userlist set(id) ;对应的 value 是一个 set ,里面存放了所有存在的 user id 。
用于遍历所有的 user ,当用户量相当大的时候可能有问题
account:email:[email] id;
account 下每个 id 的数据:
- account:[id]:version number
- account:[id]:email string
- account:[id]:password string // md5(password..salt)
- account:[id]:nickname string
- account:[id]:lastlogin hashes
- ip string
- time string
- account:[id]:history list(string)
- account:[id]:available enum(open/locked/delete)
下面是基本的场景服务用的数据:
- account:[id]:avatars set(id)
- avatar:count id
- avatar:[id]:version number
- avatar:[id]:account id
- avatar:[id]:scene string
- avatar:[id]:available enum(open/delete)
- avatar:[id]:data hashes
- name string
- figure string
- world:scene hashes
- [name] id
- scene:count id
- scene:[id]:name string
- scene:[id]:available enum(open/close/delete)
- scene:[id]:info hashes
- time string
- pc number
- scene:[id]:pc hashes
- [id] enum[online/offline]
- scene:[id]:pc:[id] hashes
- status string