redis数据库的设计实例

来源:互联网 发布:淘宝上买狗粮可靠吗 编辑:程序博客网 时间:2024/06/05 04:53

本文介绍如何使用redis设计一个小的微博系统数据库(该例子来源于redis官网文档)。
对于关系型数据库,设计数据库通常等同于设计表、模式等。对于redis我们是不需要这些的,所以我们只需要设计我们程序中的数据结构用什么key、用哪种value表示就足够了。我们首先要设计的是用户信息这个数据结构,它里边会包含username, userid, password, followers等信息。类似于关系型数据库,我们也要找一个唯一的key来表示这个用户信息结构,我们通过userid来表示用户。这里有个小窍门,我们可以设置一个nextUserId键专门存储用户id,之后用INCR nextUserId来获取一个没有被使用过的用户id。这是一个非常常用的键值存储设计模式,以后你还会看见很多这样的用法。有了用户id后,我们就可以创建用户信息结构了。假设我们现在获取了一个用户id,它的值是1000.现在我们可来设置用户信息。

set uid:1000:username john

set uid:1000:password 12345

…………

如果你习惯了关系型数据库后,看到这个设计模式一定会非常不适应,但是这就是键值存储的设计模式。我们不需要专门定义数据结构的层次关系,我们完全可以直接用key的形式表示数据之间的关系。比如,如同上边,我们可以这样表示用户信息数据结构:

用户id:用户名;

用户id:密码

用户id:个人信息:昵称;

用户id:个人信息:性别;

……

也就是说键值数据结构设计模式中,数据之间的关系可以仅仅依靠key值来体现,而不用去建立复杂的表。现在是不是已经感受到NoSQL的强大了?前边的数据结构如果使用关系型数据库可是要建立很多个表才能表示的,更不用说如果表结构变了表也得重新定义。

设计完用户信息现在我们要设计用户的粉丝数据结构。redis有一个非常适合表示这种信息的数据类型,那就是set(集合)。我们可以为每一个用户设计一个set,这个set里边存放这个用户的粉丝的id。就像是这样:uid:1000:followers。

之后我们还要设计每个用户所发表的状态的数据结构。状态是一条一条按时间排序的,对于这种数据结构redis也有非常适合的数据类型来表示,那就是list(列表)。例如:uid:1000:posts,这个list保存每个用户所发表的状态的id,然后我们可以通过这些id获取用户的状态的其他信息。状态详细信息的设计跟前边用户信息的设计类似。

到这里这个微博系统用到的主要数据结构就设计好了,剩下的就是应用程序的设计了。

0 1
原创粉丝点击