设为首页 收藏本站
查看: 1032|回复: 0

[经验分享] 内存数据库应用之NBA篮球图文直播室存储设计(Redis版)

[复制链接]

尚未签到

发表于 2015-7-22 11:36:45 | 显示全部楼层 |阅读模式
内存数据库应用之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中添加元素fieldvalue
  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 ivalue 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的长度,保存当前多少条直播信息。具体使用方法与场上队员相同。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-89434-1-1.html 上篇帖子: MVC4+WebApi+Redis Session共享练习(下) 下篇帖子: TCMalloc优化MySQL、Nginx、Redis内存管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表