华为云 GeminiDB Redis 应用场景介绍:用户下线行为上报

举报
GeminiDB-Redis博客 发表于 2023/11/08 20:33:14 2023/11/08
【摘要】 为保护未成年人的身心健康,国家对未成年人的游戏时间进行限制。游戏厂家需要及时感知用户的下线时间并上报。基于Redis实现以上功能时,通常可以为每个用户key设置过期时间,过期时通过键空间通知功能进行上报。然而,开源Redis存在上报不及时的问题。GaussDB(for Redis)能及时进行上报,被广泛应用在该业务场景。Redis键空间通知功能简介键空间通知(keyspace notific...

为保护未成年人的身心健康,国家对未成年人的游戏时间进行限制。游戏厂家需要及时感知用户的下线时间并上报。基于Redis实现以上功能时,通常可以为每个用户key设置过期时间,过期时通过键空间通知功能进行上报。然而,开源Redis存在上报不及时的问题。GaussDB(for Redis)能及时进行上报,被广泛应用在该业务场景。

Redis键空间通知功能简介

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

PUBLISH __keyspace@0__:mykey expire

PUBLISH __keyevent@0__:expire mykey

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

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

字符

发送的通知

K

键空间通知,所有通知以 __keyspace@<db>__ 为前缀

E

键事件通知,所有通知以 __keyevent@<db>__ 为前缀

g

DEL  EXPIRE  RENAME 等类型无关的通用命令的通知

$

字符串命令的通知

l

列表命令的通知

s

集合命令的通知

h

哈希命令的通知

z

有序集合命令的通知

x

过期事件:每当有过期键被删除时发送

e

驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送

A

参数 g$lshzxe 的别名

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

redis-cli --csv psubscribe '__keyevent@0__:expire'


GaussDB(for Redis)与开源Redis key过期键空间通知延时对比

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

测试步骤

1)使用memtier_benchmark预置10wkey

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

3)使用python脚本,对其中的3wkey设置10s过期时间

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

测试结果

 

无业务流量收到全部key过期耗时

有业务流量全部key过期耗时

GaussDB(for Redis)

9

9

开源Redis

341

344

 

原理分析

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

  1. 从设置了过期时间的key的集合中随机检查20key
  2. 删除检查中发现的所有过期key
  3. 如果检查结果中25%以上的key已过期,则开始新一轮任务。

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

总结

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

附录

  • 本文作者:

华为云数据库GaussDB(for Redis)团队

  • 杭州/西安/深圳简历投递:

yuwenlong4@huawei.com

  • 更多产品信息,欢迎访问官方博客:

bbs.huaweicloud.com/blogs/248875

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。