0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GaussDB(for Redis) 游戏实践:玩家下线行为上报

jf_94205927 来源:jf_94205927 作者:jf_94205927 2024-03-28 22:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

为保护未成年人的身心健康,2007 年国家推出网络游戏防沉迷系统,对未成年人的游戏时间进行限制,游戏厂家需要及时感知用户的下线时间并上报。Redis 是游戏数据库重要选型之一,在基于开源 Redis 实现以上功能时,感知用户下线行为延迟较大,导致上报时间不准确。华为云 GaussDB(for Redis)作为一款企业级游戏数据库,具备卓越的企业级能力,能及时上报用户下线行为,并被广泛应用于排行榜等多种业务场景。

基于 Redis 的用户下线上报实现

实现用户下线上报能力的常见方式

游戏厂商使用 Redis key 过期功能,结合键空间通知功能(keyspace notification),可以实现用户下线上报,常见使用方式如下:

(1)用户登录后,为每一个用户 key 设置一个过期时间(3-5 分钟);

(2)游戏客户端,定期每分钟上报一次心跳,收到心跳后,服务端重置游戏用户 key 的过期时间;

(3)为避免网络波动造成的未及时上报,若 5 分钟内,收到心跳,则重置过期时间;若未收到,将触发 key 过期,系统判定用户下线。

因此,Redis 键空间通知功能要及时感知 key 过期,以确保上报时间的准确性。

Redis 键空间通知功能

Redis 键空间通知,允许用户通过订阅频道或模式,以接收 key 的修改、过期等通知。对于每个 key 的修改,键空间通知都会发送两种不同类型的事件。以 DB0 用户 mykey 过期为例,Redis 会发送两条消息,相当于执行了两个 publish 命令:

PUBLISH__keyspace@0__:mykeyexpire

复制代码

通过订阅频道__keyspace@0__:mykey 可以接收0号数据库中所有修改键 mykey 的事件, 而订阅频道__keyevent@0__:expire 则可以接收0号数据库中所有执行 expire 命令的键。其中以 keyspace 为前缀的频道被称为键空间通知,而以 keyevent 为前缀的频道则被称为键事件通知。

可以通过命令 CONFIG SET notify-keyspace-events [parameter]来开启或者关闭键空间通知功能,若 parameter 为空则表示关闭该功能,若不空则开启。通常将参数设置为“AKE”,表示发送所有类型通知。

通过以下命令,可以订阅 DB0 所有过期的用户 key。

redis-cli--csvpsubscribe'__keyevent@0__:expire'

复制代码

GaussDB(for Redis) VS 开源 Redis

过期键空间通知延时对比

Redis 规格:都采用 4GB 的规格

测试步骤

使用 memtier_benchmark 预置 10w 个 key

使用客户端定期 key 过期事件

使用 python 脚本,对其中的 3w 个 key 设置 10s 过期时间

分别在有业务流量和无业务流量场景,统计收到 3w 个 key 过期的通知耗时

测试结果:

可以看出,在有无业务流量场景下,GaussDB(for Redis)仅需 9 秒即可完成全部 key 过期的上报,而社区 Redis 需要 4 分钟左右才能完成上报,严重影响用户下线行为上报的准确性。

原理分析

开源 Redis 键空间通知功能采用了惰性删除和定期删除两种策略,即在访问时进行过期检查,同时后台以一定频率执行定期检查任务,可以通过修改配置文件 redis.conf 的 hz 选项来调整这个频率。每次过期任务会按以下流程进行删除操作:

1. 从设置了过期时间的 key 的集合中随机检查 20 个 key;

2. 删除检查中发现的所有过期 key;

3. 如果检查结果中 25%以上的 key 已过期,则开始新一轮任务。

可以注意到,开源 Redis 并不是一次运行就检查所有的库中所有的键,而是随机检查一定数量的键,从而导致上报延时长。而 GaussDB(for Redis)后台有一个实时线程会对 key 进行持续扫描,及时上报过期 key,也不会影响前台写操作。

GaussDB(for Redis)是一款超越开源 Redis 的企业级 KV 数据库,在游戏场景中,除了被应用在游戏玩家下线场景,还被广泛应用在玩家数据存储、排行榜、好友关系、消息推送等场景。其采用存算分离的架构,既能满足游戏业务对高并发的性能指标要求,又能降本增效,深受游戏开发者的青睐。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    4431

    浏览量

    46610
  • Redis
    +关注

    关注

    0

    文章

    397

    浏览量

    12292
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Redis生产环境部署避坑指南

    Redis 是 PHP 项目中使用最广泛的 Nosql 缓存数据库,但很多团队在生产环境中部署 Redis 时存在诸多隐患:内存配置不当导致 OOM、持久化配置错误导致数据丢失、集群部署不合理导致性能下降、安全配置缺失导致被攻击。
    的头像 发表于 05-25 11:06 358次阅读

    小鹏集团Robotaxi首台量产车正式下线

    2026年5月18日,小鹏集团Robotaxi首台量产车在广州正式下线,这是中国首次由整车厂以全栈自研方式完成Robotaxi量产下线
    的头像 发表于 05-20 10:15 164次阅读

    Redis应用监控指标大盘点

    Redis作为高性能内存数据库,广泛应用于缓存、会话存储、消息队列等场景。对Redis运行状况的有效监控,是保障业务稳定性的关键。本文的目的是帮助运维工程师建立完整的Redis监控知识体系,讲解需要监控哪些指标、如何采集这些指标
    的头像 发表于 04-09 10:07 237次阅读

    全方位对比:Redis能取代MySQL吗?看完这篇你就懂了

    Redis能不能取代MySQL?答案很明确:不能取代,但可以互补。
    的头像 发表于 04-07 10:50 286次阅读
    全方位对比:<b class='flag-5'>Redis</b>能取代MySQL吗?看完这篇你就懂了

    为什么说带线性霍尔的磁轴键盘,才是电竞玩家的物理外挂?

    性能上也依然大幅领先。而磁轴键盘本身就是为极致电竞性能而生,对游戏玩家来说,选它真的能称上物理意义上的外挂了! 总结一下线性霍尔传感器,本质上是给磁轴键盘提供了一个“更高效、更耐用、更灵活”的触发方案
    发表于 03-23 17:28

    LuatOS:AirCloud 云协议——物联网设备数据上报实操详解

    物联网设备开发中,便捷上云与稳定数传是核心需求,LuatOS 的 AirCloud 物联网云服务通信协议可实现数据上报核心功能,支持七类数据的定期 / 触发式上报。本文将讲解该协议相关内容,同时提供模组开源示例、核心代码及配套开发硬件与教程,助力开发者快速实现设备接入与数
    的头像 发表于 03-19 18:23 250次阅读
    LuatOS:AirCloud 云协议——物联网设备数据<b class='flag-5'>上报</b>实操详解

    Redis哨兵模式的自动故障检测与主从切换实战

    Redis 主从复制解决了读扩展和数据冗余问题,但主节点故障时需要人工介入切换,这在生产环境中是不可接受的。Sentinel(哨兵)模式在主从架构之上增加了自动故障检测和故障转移能力,是 Redis 高可用的标准方案之一。
    的头像 发表于 02-27 11:05 468次阅读

    MediaTek与异环游戏达成深度合作

    为了给全球玩家带来更流畅、更节能的游戏体验,MediaTek与《异环》达成深度合作,双方团队基于天玑星速引擎的倍帧技术(MediaTek Frame Rate Converter,简称MFRC)为全球玩家带来画面更流畅、续航更持
    的头像 发表于 01-27 09:20 929次阅读

    【技术贴】手柄芯片重新定义次世代交互体验,玩家:这物理外挂太逆天!

    随着游戏设备的升级,游戏手柄作为核心交互设备持续技术革新。在主机游戏中,高精度操作适配动作格斗、模拟驾驶等多种游戏类型,显著提升玩家沉浸感。
    的头像 发表于 08-11 15:30 1255次阅读
    【技术贴】手柄芯片重新定义次世代交互体验,<b class='flag-5'>玩家</b>:这物理外挂太逆天!

    【VisionFive 2单板计算机试用体验】2、打造复古游戏机(Batocera镜像+FBNeo虚拟机, 多款游戏ROM分享)

    模拟器(Emulators) 而设计的 Linux 发行版,它们主要运行在树莓派、旧电脑、安卓盒子、电视棒等低功耗设备上,方便玩家用来玩 NES、SNES、PS1、N64、街机等老游戏。 下面是四大主流
    发表于 07-17 21:58

    Redis集群部署配置详解

    Redis集群是一种分布式Redis解决方案,通过数据分片和主从复制实现高可用性和横向扩展。集群将整个数据集分割成16384个哈希槽(hash slots),每个节点负责一部分槽位。
    的头像 发表于 07-17 11:04 1286次阅读

    Redis集群部署与性能优化实战

    Redis作为高性能的内存数据库,在现代互联网架构中扮演着关键角色。作为运维工程师,掌握Redis的部署、配置和优化技能至关重要。本文将从实战角度出发,详细介绍Redis集群的搭建、性能优化以及监控运维的核心技术。
    的头像 发表于 07-08 17:56 1090次阅读

    游戏玩家的听觉革命!这款虚拟 7.1 游戏声卡评估板让你 “声” 临其境!

    在激烈的游戏对战中,你是否曾因听不清敌人脚步声而被偷袭?又是否在与队友沟通时,被键盘敲击声、鼠标点击声等杂音干扰,导致交流不畅?别担心,A316-V71-Game-V1虚拟7.1游戏声卡评估板强势
    的头像 发表于 07-05 15:35 1388次阅读
    <b class='flag-5'>游戏</b><b class='flag-5'>玩家</b>的听觉革命!这款虚拟 7.1 <b class='flag-5'>游戏</b>声卡评估板让你 “声” 临其境!

    【经验分享】在Omni3576上编译Redis-8.0.2源码,并安装及性能测试

    本文首先介绍Redis是什么,然后介绍如何在Omni3576上编译Redis-8.0.2源码,以及从源码编译、安装Redis,最后介绍如何在Omni3576上运行Redis性能测试,并
    的头像 发表于 06-05 08:05 1181次阅读
    【经验分享】在Omni3576上编译<b class='flag-5'>Redis</b>-8.0.2源码,并安装及性能测试

    【幸狐Omni3576边缘计算套件试用体验】Redis最新8.0.2版本源码安装及性能测试

    本文首先介绍Redis是什么,然后介绍如何在Omni3576上编译Redis-8.0.2源码,以及从源码编译、安装Redis,最后介绍如何在Omni3576上运行Redis性能测试,并
    发表于 06-03 01:28