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

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

3天内不再提示

GeminiDB 新特性:让 Redis 广告频控爱不释手的 exHASH

jf_21561199 来源:jf_21561199 作者:jf_21561199 2024-04-08 18:26 次阅读

exHash 类型是一种支持 Field 过期的新型数据类型,它在原先的 Hash 类型基础上进行了扩展:在支持 Hash 类型的通用功能以外,exHash 类型还支持为 Field 设置过期时间和版本,增强了数据结构的灵活性,从而简化了很多复杂场景下的业务开发工作。

本文以两种常见的场景(频控场景 &购物车)为例,通过使用 GeminiDB Redis 接口中的 exHash 类命令来实现复杂的业务,简化开发难度。

一、exHash 命令使用简介

wKgaomYELouAXiH4AAqJUmc8_5k47.webp

命令语法定义如下:

大写关键字:命令关键字。

斜体:变量。

[options]:可选参数,不在括号中的参数为必选。

A|B:该组参数互斥,请进行二选一或多选一。

...:前面的内容可重复。

二、应用场景

1.频控场景

频控指的是对用户在一定时间内(例如一天、一周、一个月)进行某种操作的次数进行限制,可以控制特定广告或信息在一定时间内在特定平台上的展示次数,以避免过度曝光和广告疲劳,同时优化广告效果和用户体验;对于广告来说,也可以提高广告的效果和转化率。此外,频控还可以避免恶意行为,如刷流量、刷评论、刷点赞等。

频控的 3 个要素包含用户 ID、广告 ID、触发次数;以用户 ID 为 key,广告 ID 为 field,指定时间内的触发次数为 value,恰好构成频控的三要素。先配置好各个广告的指定频控策略,如下图所示即可根据如下的方式来实现频控:

wKgZomYELouAD_MjAAGxpe5msA034.webp

最左边通过 Hash 类型来实现,通过 expire 命令设置 User_1 的过期时间为一天,每推送一次通过 hincrby 来增加指定广告的推送次数,每次推送指定广告前在一天内的推送次数则可以通过 hget 获取进行判断,一天后该用户的数据自动过期无需手动清理,这样便可以简单地实现频控。但这个方案的缺点在于对于每个用户(即每个 key)只能设置一个过期时间,无法做到例如 8 小时 3 次这样指定时间段内的灵活的频控策略。

为了做到对每个广告都配置指定时间段内的灵活频控,如中间图所示可以通过将时间戳拼接在 value 里的方式用 Hash 类型来实现,但这种方案无疑是增加了业务侧开发的工作量。

如最右图所示,支持给 field 设置过期时间的 exHash 类型可以很完美地解决 Hash 类型面对频控场景的缺点。由于 Field 支持过期时间设置,那么该场景下,平台可以给每个广告都配置不同时间段内的频次要求,假设此时给 AD_2 配置的频控策略为 8 小时内 2 次,那么如图所示在下一次再准备给 User_1 推送 AD_2 广告前,先通过 exhget User_1 AD_2 命令获取到了该值已经是 2 时,便可以判断出此时根据平台频控策略,不应该再给 User_1 推送 AD_2 广告了。而当 8 小时一过,User_1 的 AD_2 这个 field 过期后,exhget 无法再获取到这个 field 的信息,则可以继续给 User_1 推送 AD_2 广告了。

2.购物车场景

最近双十一期间,相信很多同学购物车里都填满了各种想要清空的宝贝,这里就以购物车场景为例介绍该场景的几种不同 Redis 类型的实现,并比较这几种实现方案的优缺点。

1)基于 String 实现购物车功能

如图所示基于 String 可以轻松地实现各个用户的购物车功能,该方案需要将用户 ID 与商品 ID 进行拼接作为 key,例如 User_1#Earphones_1,key 对应的 value 为购物车中用户准备购买的数量,其中可能有部分商品为限时特购,所以有过期时间,为 key 对应的过期时间。

wKgaomYELoyAIiDeAABrXRocggY85.webp

涉及命令如下:

wKgZomYELoyAGUgUAAD6XRrxoXA79.webp

该方案会存在如下问题:

额外拼接增加编、解码开发工作量

某个用户获取自己的购物车清单时还需要通过 scan 命令前缀匹配扫描所有 key,并通过 get 命令去获取对应的值。

想要直接获取清单长度时,仍然需要遍历整个前缀 key 的数目,方法复杂。

存在大量重复的用户名前缀,浪费存储空间。

2)基于 Hash 实现购物车功能

可以根据如图所示的 Hash 类型来实现购物车的管理,用户 ID 作为 key,商品 ID 作为 field,value 为购物车中对应商品的数量。其中对于部分限时特购的商品,其过期时间通过拼接的方式放到 field 对应的 value 里。

wKgaomYELo2AcvMXAABWc45KMjU39.webp

涉及命令如下:

wKgZomYELo2AQ2oxAAEoVPDwuJk41.webp

该方案相对于 String 类型的方案有了不少优化:

获取某个用户购物车中的所有商品清单仅需要一个 hgetall 命令即可

获取某个用户的清单长度时直接 hlen 获取即可

不存在大量重复的用户名前缀问题

然而该方案仍存在一个明显的缺点,即对于部分限时特购的商品处理起来复杂:对于 User_1 的 Keyboard_1 商品,如果要再加一个数量,不能直接使用 hincrby,而是需要先 hget 获取 Keyboard_1 商品的值并解码,再加上指定的数量再编码后 hset 对应的值。

3)基于 exHash 实现购物车功能

根据如图所示的 exHash 类型来实现购物车的管理,同 Hash 类型一样,用户 ID 作为 key,商品 ID 作为 field,value 为购物车中对应商品的数量。其中对于部分限时特购的商品,由于 exHash 类型可以为 Field 设置过期时间,其过期时间可通过 hset 命令直接设置。

wKgaomYELo6AXUclAABkKnHz51E91.webp

涉及命令如下:

wKgZomYELo-ANXV7AAFeIa9cFtk63.webp

该方案相对于 Hash 类型的优化主要体现在可以直接为各 field 设置过期时间,使业务侧使用起来简单又高效。可以看到 exHash 类型相关的命令和 Hash 类型是类似的,使用起来学习成本很低,业务侧改造成本相对也比较低。

wKgaomYELo-ATHolAAJmte8PcIQ67.webp

图 1.1 华为商城购物车中,用户 ID、商品 ID、商品数量及 exhash 类型命令的使用。

三、总结

本文介绍了 GeminiDB Redis 接口的 exHash 类型的特性、使用方法及应用场景。为客户提供了一种语法与原生 Redis Hash 类型类似、和 Hash 类型的使用相互隔离、支持给 Field 单独设置过期时间和版本的 exHash 类型作为各种复杂场景的解决方案。未来,GeminiDB Redis 接口将持续致力于开发更多好用的企业级特性,帮助客户轻松运维,高效开发。

如果你的业务需要一款稳定可靠的 KV 数据库,可以试试 GeminiDB Redis 接口。

审核编辑 黄宇

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

    关注

    0

    文章

    55

    浏览量

    7606
  • Redis
    +关注

    关注

    0

    文章

    376

    浏览量

    10888
收藏 人收藏

    评论

    相关推荐

    Redis缓存与Memcached的比较

    关键特性和差异: 1. 数据存储 Redis: Redis是一个开源的键值存储,支持多种数据结构,如字符串、列表、集合、有序集合、散列、位图、超日志和地理空间索引。 它支持持久化,可以将内存中的数据保存到磁盘,支持RDB(快照)
    的头像 发表于 12-18 09:33 168次阅读

    RoboMaster S1/EP SDK 在 Linux 下安装及使用

    的,不到3000块。孩子玩起来还爱不释手,还能顺便学编程。 在 Rust 群里得知有一个 Dora-rs (https://dora-rs.ai/) 框架,而其作者也是用 Robomaster S1
    的头像 发表于 12-04 18:23 295次阅读
    RoboMaster S1/EP SDK 在 Linux 下安装及使用

    福特CEO认可中国电动汽车企业领先地位

    爱不释手,甚至不愿尝试其他车型。法利还透露,在之前的访华行程中,他特别关注了小米汽车,并亲自安排将一辆小米SU7从上海空运至芝加哥进行深入研究。
    的头像 发表于 10-23 14:35 434次阅读

    12V化妆镜触摸灯三级触摸调光方案开发

    对化妆来说光线实在重要,在非合适的光源下打过来光下看自己,我们所看到的轮廓跟现实情况是有偏差的。换句话来说,要想化出完美的妆容,妹子们都需要一束来自镜子的光。 好用到爱不释手!镜面两个按钮,操作
    的头像 发表于 10-22 15:03 215次阅读

    玄派玄机星2024游戏本的简单介绍

    玄派玄机星2024,一款拥有独特个性且性价比优秀的游戏本,它采用第二代AMD AI PC 处理器 —— 锐龙7 8845HS移动处理器,搭配AMD Radeon RX 7600M XT独显,强大的算力和优秀的画面表现力,让你在游戏中爱不释手
    的头像 发表于 09-19 10:52 671次阅读

    【「OpenHarmony开发与实践 | 基于红莓RK2206开发板」阅读体验】+初体验2连发发

    划分得恰到好处,就像精心布置的迷宫,人在阅读的过程中既能轻松找到出路,又能享受到探索的乐趣! 而内容呢,更是爱不释手!作者用他那简洁明了的语言,把复杂的概念和理论描述的非常清楚,真的是太厉害
    发表于 09-18 18:01

    分立器件在智能美妆化妆镜上的应用

    爱美之心,人皆有之。随着智能时代来临,带点AI的智能化妆镜更有市场竞争力。近日,在某国外网站上,卖火了的产品,它集补光、高清显示和AI功能于一身,美妆神器成为很多博主爱不释手的宝贝。它通常会采用
    的头像 发表于 08-05 10:06 305次阅读
    分立器件在智能美妆化妆镜上的应用

    高效充电!你被这条快充电源线硬控了吗?

    需求这条电源线都能高效满足爱不释手!快让我们一起揭开这条橙色USBType-C快充电源线的神秘面纱吧!产品亮点高效充电快人一步MINIWARE新推出的橙色快充
    的头像 发表于 06-06 08:02 580次阅读
    高效充电!你被这条快充电源线硬控了吗?

    华为云多模数据库 GeminiDB 架构与应用实践直播问答实录

    龙通过直播(链接见文末)的方式,分享了《华为云多模数据库 GeminiDB 的技术架构及应用实践》,对 GeminiDB 的技术特性、架构优势等进行了全方位解读。整场直播干货满满,
    的头像 发表于 04-08 18:25 1177次阅读

    华为云 GeminiDB 发布新版本,全面支持 Redis 6.2

    华为云 GeminiDB 是一款兼容 Redis 协议的弹性 KV(Key-Value)数据库,支持远超内存的容量和极致的性能,可支撑用户平滑迁移,在广告、游戏、电商等行业有着广泛的应用。 今年 3
    的头像 发表于 04-08 18:22 1138次阅读
    华为云 <b class='flag-5'>GeminiDB</b> 发布新版本,全面支持 <b class='flag-5'>Redis</b> 6.2

    Redis开源版与Redis企业版,怎么选用?

    点击“蓝字”关注我们数以千计的企业和数以百万计的开发人员Redis开源版来构建应用程序。但随着用户数量、数据量和地区性的增加,成本、可扩展性、运营和可用性等问题也随之而来。Redis企业版
    的头像 发表于 04-04 08:04 1107次阅读
    <b class='flag-5'>Redis</b>开源版与<b class='flag-5'>Redis</b>企业版,怎么选用?

    GaussDB(for Redis) 特性揭秘:多租户管理

    华为云 GaussDB(for Redis)持续完善企业级增强特性,是名副其实的 "Redis Plus" ,其中很经典的企业级特性是 多租户能力 ,支持添加只读账号、读写账号,且具备
    的头像 发表于 03-28 22:06 757次阅读
    GaussDB(for <b class='flag-5'>Redis</b>) <b class='flag-5'>特性</b>揭秘:多租户管理

    GaussDB(for Redis) 特性揭秘:大 key 治理

    运行过程中悄悄产生的,人防不胜防。因此,一款可随时在线诊断,且能主动预警,防患于未然的 Redis 服务产品显得尤为重要。   作为由华为云精心打造的企业级 Redis,GaussDB
    的头像 发表于 03-28 22:06 675次阅读
    GaussDB(for <b class='flag-5'>Redis</b>) <b class='flag-5'>特性</b>揭秘:大 key 治理

    新版 Redis 不再“开源”,对使用者都有哪些影响?

    2024 年 3 月 20 日,Redis Labs 宣布从 Redis 7.4 开始,将原先比较宽松的 BSD 源码使用协议修改为 RSAv2和 SSPLv1协议。该变化意味着 Redis
    的头像 发表于 03-27 22:30 513次阅读
    新版 <b class='flag-5'>Redis</b> 不再“开源”,对使用者都有哪些影响?

    MongoDB和Redis的技术特性

    Redis作为一个高性能的内存数据存储系统,能够提供快速的缓存机制,从而帮助应用承受高并发请求,显著提高系统响应速度和吞吐量。这与国内互联网公司推崇的快速迭代和高用户并发量的特点非常契合。
    的头像 发表于 02-01 11:42 515次阅读
    MongoDB和<b class='flag-5'>Redis</b>的技术<b class='flag-5'>特性</b>