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
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Unity 3(一):简介与示例
    MongoDB以Windows Service运行
    动态SQL中变量赋值
    网站发布IIS后堆栈追踪无法获取出错的行号
    GridView Postback后出错Operation is not valid due to the current state of the object.
    Visual Studio 2010 SP1 在线安装后,找到缓存在本地的临时文件以便下次离线安装
    SQL Server 问题之 排序规则(collation)冲突
    IIS 问题集锦
    linux下安装mysql(ubuntu0.16.04.1)
    apt-get update 系列作用
  • 原文地址:https://www.cnblogs.com/hadoopdev/p/3081255.html
Copyright © 2011-2022 走看看