本文介绍如何使用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获取用户的状态的其他信息。状态详细信息的设计跟前边用户信息的设计类似。

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

redis数据库的设计实例相关推荐

  1. Serverless 解惑——函数计算如何访问 Redis 数据库

    函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函数计算为您准备好计算资源,弹性地可靠地运行任务 ...

  2. redis的那种目录结构能新建么_Serverless 解惑——函数计算如何访问 Redis 数据库...

    函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函数计算为您准备好计算资源,弹性地可靠地运行任务 ...

  3. css网页设计实例代码_大型电商平台设计实例:电商平台项目工程、数据库选型、代码库...

    电商平台微服务体系架构 经过一系列的微服务设计, 下面使用一张维导图完整表示这个电商平台的微服务架构设计模型,如图 3-6 示. 这是一个为简单的电商平台微服务架构设计模型,并且使用了粗粒度的微服务划 ...

  4. 浅谈redis数据库的键值设计

    丰富的数据结构使得redis的设计非常的有趣.不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与.redis的DBA需要熟悉 ...

  5. pythonredis实例_Python读写Redis数据库操作示例

    使用Python如何操作Redis呢?下面用实例来说明用Python读写Redis数据库. 比如,我们插入一条数据,如下: import redis class Database: def __ini ...

  6. MYSQL数据库设计和数据库设计实例(一)

    数据库设计(database design):数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效的存储和管理要求,满足各种用户 ...

  7. 超大型Oracle数据库设计实例

    超大型系统的特点为: 1.处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过1TB: 2.系统必须提供实时响应功能,系统需不停机运行,要求系统有很高的可用性及可扩展性. 这篇是笔者针对 ...

  8. 大型电商平台设计实例:电商平台项目工程、数据库选型、代码库

    电商平台微服务体系架构 经过一系列的微服务设计, 下面使用一张维导图完整表示这个电商平台的微服务架构设计模型,如图 3-6 示. 这是一个为简单的电商平台微服务架构设计模型,并且使用了粗粒度的微服务划 ...

  9. 篮球赛场数据统计系统数据库设计实例

    篮球赛场数据统计系统数据库设计实例 研究内容(篮球赛场数据统计系统)    1)比赛前对球队.球员各项基本信息的录入功能: 2)比赛时对进球得分.各种进球类型以及裁判评判情况等数据和信息的记录功能: ...

最新文章

  1. 敏捷研发落地之持续集成
  2. python发送邮件和附件
  3. ADSL(Asymmetric Digital Subscriber Loop)技术
  4. actionscript3 事件类型
  5. java web中验证码的实现
  6. QTP的Action之间传递参数
  7. oracle 实时查询最耗CPU资源的SQL语句
  8. Android.对话框(AlertDialog/Toast/Snackbar)
  9. lecture6-mini批量梯度训练及三个加速的方法
  10. 跟着“土牛”学架构知识
  11. java 异常返回json_Spring MVC全局异常后返回JSON异常数据
  12. 电子助力方向机控制模块_17款路虎揽胜:偶发性电子助力失效
  13. Linux监控平台(zabbix监控介绍,安装zabbix,解决忘记admin密码)
  14. python爬取抖音评论_爬取抖音299w用户数据后的分析
  15. 一些牛人的IOS博客,mark下慢慢学习
  16. 微信下载录音文件(音轨分离 ffmpeg视频合成)
  17. c语言实验报告指针数组,C语言实验报告-数组与指针.doc
  18. 利用pm2 启动node项目
  19. 计算机sid 用户sid,win10系统怎么生成新的SID号
  20. 联想计算机不能进入系统桌面,联想电脑无法重装系统-联想电脑怎么重装系统我的电脑启动后到不了桌面,最后屏幕上没有任何 爱问知识人...

热门文章

  1. php spry文本域_SPRY验证文本域之用户名称
  2. tcp协议一定要有服务器吗,复习TCP协议——看这篇就够了
  3. 抽象工厂模式(三):抽象工厂模式概述
  4. MMKV 原理、使用以及简单封装
  5. 什么叫h5项目_HTML5和H5是一个意思吗
  6. 计算机三级数据库技术 第14章 数据仓库与数据挖掘
  7. 旋翼回收火箭系列博客1——研究生未来飞行器设计大赛火箭赛道介绍及分析
  8. 维诺图(Voronoi Diagram)分析与实现
  9. 代码实现对麻将的听牌分析(判断什么牌能胡)
  10. Python判断字符串是否为字母或者数字或者数字字母组合