zoukankan      html  css  js  c++  java
  • 内存数据库应用之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的长度,保存当前多少条直播信息。具体使用方法与场上队员相同。


    作者:张子良
    出处:http://www.cnblogs.com/hadoopdev
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    C#导出EXCEL方法总结
    C#程序——多条件查询
    C# checklistbox控件用法总结(怎样得到多选的值,以及动态加载数据)
    C#获取当前日期时间(转)
    C# winform 中MessageBox用法大全(附效果图)
    多条件查询
    vs2013 c#连接mysql数据库并显示查询结果到DataGridView上
    C# 登录界面从数据库取用户名密码匹配结束后进入登录界面
    Chart控件X轴显示不全的解决方法
    bootstrap + vue 简易留言板(todolist)
  • 原文地址:https://www.cnblogs.com/hadoopdev/p/3081255.html
Copyright © 2011-2022 走看看