内存数据库应用之NBA篮球图文直播室存储设计(Redis版)-阿里云开发者社区

开发者社区> 胖子哥> 正文

内存数据库应用之NBA篮球图文直播室存储设计(Redis版)

简介:
+关注继续查看

1.1 摘要

上一篇《内存数据库应用之NBA篮球图文直播室存储设计》针对NBA篮球直播室的需求规格做了详细的介绍,其中存储设计是基于Memcached内存结构特点进行。本文针对相同的业务规则和需求,采用Redis实现相同的功能,只是存储结构发生了变化。考虑到介绍Redis的资料网上已经很多,本文不再重复介绍,感兴趣的可自行学习,在这里只重点介绍Redis的实际应用。为了行文方便,所有针对数据的操作均使用命令行执行。

1.2 实验环境

表1:          实验环境

备注

操作系统

RHEL6.0.2

 

Redis版本

2.6.13

 

1.3 存储设计

1.3.1 实时数据

1.3.1.1 实时比分

Memcached存储的数据类型是字符型,而实际操作过程中,需要用到的数据类型是整型,因此每次进行数据操作时,都需要进行数据类型转换。Redis存储类型仍然为字符型(string),但是针对字符操作提供了计数操作提供了封装,具体操作命令如下:

incr(key):名称为key的string增1操作

incrby(key, integer):名称为key的string增加integer

decr(key):名称为key的string减1操作

decrby(key, integer):名称为key的string减少integer

示例脚本如下:

Incrby NBA.YYYYMMDD.XX.HOST.SCORE 2         (两分球)

Incrby NBA.YYYYMMDD.XX.HOST.SCORE 3                 (三分球)

Incrby NBA.YYYYMMDD.XX.HOST.SCORE 1  (罚球)

1.3.1.2 单节比分

单节比分可以采用与实时比分相同的存储策略,考虑到一场比赛分为多节,特殊情况下会包含单个或多个加时的情况,采用Redis存储时我们采用Hash结构存储相关数据。涉及相关操作包括:

hset(key, field, value):向名称为key的hash中添加元素field<—>value

hget(key, field):返回名称为key的hash中field对应的value

hmget(key, field1, …,field N):返回名称为key的hash中field i对应的value

hmset(key, field1, value1,…,field N, value N):向名称为key的hash中添加元素field i<—>value i

hincrby(key, field, integer):将名称为key的hash中field的value增加integer

操作脚本如下所示:

HSET NBA.YYYYMMDD.XX.HOST.ESCORE 1 0

HSET NBA.YYYYMMDD.XX.HOST. ESCORE 2 0

HINCRBY NBA.YYYYMMDD.XX.HOST. ESCORE 1 2 第一节得分增加两分

HINCRBY NBA.YYYYMMDD.XX.HOST. ESCORE 1 2 第一节得分增加两分

HGET NBA.YYYYMMDD.XX.HOST. ESCORE 1  获取第一节得分

HGET NBA.YYYYMMDD.XX.HOST. ESCORE 1 2 第一节、第二节得分

1.3.1.3 场上队员

Redis支持List结构,所有针对当前场上队员信息的存储采用List,这一点区别于Memcached针对每一个球员位置的设置。相关操作命令如下:

rpush(key, value):在名称为key的list尾添加一个值为value的元素

lpush(key, value):在名称为key的list头添加一个值为value的 元素

lrange(key, start, end):返回名称为key的list中start至end之间的元素(下标从0开始,下同)

ltrim(key, start, end):截取名称为key的list,保留start至end之间的元素

lindex(key, index):返回名称为key的list中index位置的元素

lset(key, index, value):给名称为key的list中index位置的元素赋值为value

lrem(key, count, value):删除count个名称为key的list中值为value的元素。

lpop(key):返回并删除名称为key的list中的首元素

rpop(key):返回并删除名称为key的list中的尾元素

我们调用LPUSH命令,将每一个队员的信息存储链表,需求获取当前场上队员信息是,调用lrange命令获取当前在场上的5位队员。这里面的区别好处打大家可以慢慢体会。示例脚本如下:

LPUSH NBA.YYYYMMDD.XX.HOST.MEMBER 康利

LPUSH NBA.YYYYMMDD.XX.HOST.MEMBER 加索尔

LPUSH NBA.YYYYMMDD.XX.HOST.MEMBER 兰多夫

LPUSH NBA.YYYYMMDD.XX.HOST.MEMBER 李

LRANGE NBA.YYYYMMDD.XX.HOST.MEMBER 0 4

备注:在这里我们将List按照队列方式使用,通过读取前5位数据,获取当前场上队员信息。

本节犯规、剩余长暂停、剩余短暂停采用string存储,有实时比分存储方式相同。

1.3.2 文字直播

文字直播采用List进行存储,可以保存设定List的长度,保存当前多少条直播信息。具体使用方法与场上队员相同。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一3.3.2 实验室小结
本节书摘来华章计算机《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一书中的第3章 ,第3.3.2节,[美] 克里斯托弗·库塞克(Christopher Kusek) 著 吕南德特·施皮斯(Rynardt Spies)姚海鹏 刘韵洁 译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1080 0
使用Redis搭建持久化K-V存储
最近在项目中需要在多机之间共享一些集合,Hash等有类型的数据结构,如果基于Mysql来存储的话需要预先定义一系列表结构并维护表结构和数据结构的一致性,后续还需要根据时间对数据库做旧数据清理工作,所以开始调研一些能满足下列需求的存储引擎。 具有高可用,持久化的特性。 数据可以设置失效时间,方便自动数据清理。 支持常用数据结构,如集合,有序集合,Hash map,列表等。 支持事务操作,
4329 0
redis是如何存储对象和集合的
在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术。前者主要是为了减轻数据库压力,大幅度提升性能。后者主要是为了提高用户的体验度,我理解的是再后端做的一个ajax请求(异步),并且像ribbmitmq等消息队列有重试机制等功能。
1569 0
快速搭建基于 Serverless 的 .NET Core 数据库应用
快速搭建基于 Serverless 的 .NET Core 数据库应用 简介 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。
19973 0
海量结构化数据存储技术揭秘:Tablestore表设计最佳实践
前言 表格存储Tablestore是阿里云自研的面向海量结构化数据存储的Serverless NoSQL多模型数据库。在处理海量数据时,方案设计非常重要,合理的设计才能够发挥出数据库的性能水平。本文主要介绍Tablestore在表设计方面的一些实践经验,供大家参考。
7607 0
《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一3.3.3 供应实验室
本节书摘来华章计算机《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一书中的第3章 ,第3.3.3节,[美] 克里斯托弗·库塞克(Christopher Kusek) 著 吕南德特·施皮斯(Rynardt Spies)姚海鹏 刘韵洁 译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
845 0
+关注
胖子哥
数据仓库模型设计专家,主要从事金融,互联网行业广告行业数据架构和数据营销。QQ:1106110976
154
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载