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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

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的长度,保存当前多少条直播信息。具体使用方法与场上队员相同。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
13天前
|
存储 安全 搜索推荐
酒店管理系统的数据库的应用以及选择
酒店管理系统数据库关乎运营效率和服务质量。数据库用于数据存储、管理、分析及客户关系管理,确保房态与预订精准。选择时重视性能稳定性、数据安全、易用性、可扩展性和成本效益。合适的数据库能提升酒店运营效率并优化客户体验。
21 2
|
21天前
|
存储 消息中间件 NoSQL
Redis数据类型详解:选择合适的数据结构优化你的应用
Redis数据类型详解:选择合适的数据结构优化你的应用
|
1天前
|
定位技术 Python
Pyglet综合应用|推箱子游戏之关卡图片载入内存
Pyglet综合应用|推箱子游戏之关卡图片载入内存
11 0
|
7天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
14 1
|
7天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
11 0
|
7天前
|
存储 数据库连接 数据处理
NumPy与数据库的结合应用探索
【4月更文挑战第17天】本文探讨了NumPy与数据库结合在数据处理和分析中的应用,阐述了结合使用的必要性,包括数据提取、转换、处理与分析及结果存储。通过Python数据库连接库提取数据,转化为NumPy数组进行高效计算,适用于金融等领域的数据分析。结合应用的优势在于高效性、灵活性和可扩展性,但也面临数据转换、性能优化和安全性挑战。
|
8天前
|
缓存 移动开发 Java
构建高效的Android应用:内存优化策略
【4月更文挑战第16天】 在移动开发领域,尤其是针对资源有限的Android设备,内存优化是提升应用性能和用户体验的关键因素。本文将深入探讨Android应用的内存管理机制,分析常见的内存泄漏问题,并提出一系列实用的内存优化技巧。通过这些策略的实施,开发者可以显著减少应用的内存占用,避免不必要的后台服务,以及提高垃圾回收效率,从而延长设备的电池寿命并确保应用的流畅运行。
|
13天前
|
存储 SQL Oracle
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
35 7
|
15天前
|
存储 传感器 监控
数据库的应用
数据库广泛应用于电子商务、物流、酒店管理、医疗、航空、教育、政府和物联网等领域,用于高效存储和管理商品信息、订单数据、医疗记录、航班详情等各类数据,提升效率和服务质量。随着技术进步,其应用场景将持续扩展。
11 1
|
15天前
|
NoSQL 安全 Redis
redis内存限制与淘汰策略
Redis内存管理包括限制和淘汰策略。`maxmemory`配置参数决定内存上限,无设置时64位系统默认不限制,可能导致系统资源耗尽,生产环境建议设定合理值。当内存满时,未设置淘汰策略会导致写入错误。Redis提供8种淘汰策略,如LRU(最近最少使用)和LFU(最不经常使用),以及随机或基于过期时间的删除。需根据数据重要性、访问频率和一致性选择合适策略。
126 0

热门文章

最新文章