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

    文章

    74

    浏览量

    8173
  • Redis
    +关注

    关注

    0

    文章

    394

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Redis应用监控指标大盘点

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

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

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

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

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

    肖克利 | 极端环境测试,验证与实战同

    直击新能源车企核心痛点极端环境测试,验证与实战同新能源汽车测试标准正加速升级,极端环境验证已成核心竞争力。肖克利高低温试验箱以实战化测试赋能车企,助力产品质量全面提升!01行业测试标准变革,寒区
    的头像 发表于 12-05 12:04 1513次阅读
    肖克利 | 极端环境测试,<b class='flag-5'>让</b>验证与实战同<b class='flag-5'>频</b>!

    AI接手,微博正在重写广告的传播逻辑

    正在被AI改写为品牌与用户对话的起点。 微博通过AI原生评论、智能评论引导、微博商搜话题词、视频语义套装等广告产品,分别切入评论、话题与视频三大核心场景,为品牌打开了传播的“后半场”。 它的目标很明确:广告不止于被
    的头像 发表于 11-21 10:03 433次阅读
    AI接手,微博正在重写<b class='flag-5'>广告</b>的传播逻辑

    TCS7191CB:小身材大能量!这颗3W音频芯片为何工程师爱不释手

    在便携式音频设备飞速发展的今天,工程师们不断追求更高效率、更小体积、更低功耗的音频解决方案。而 汤诚科技的TCS7191CB ,正是这样一颗人眼前一亮的芯片——它仅有MSOP-8的迷你封装,却能
    的头像 发表于 11-13 16:42 3076次阅读
    TCS7191CB:小身材大能量!这颗3W音频芯片为何<b class='flag-5'>让</b>工程师<b class='flag-5'>爱不释手</b>?

    用户体验“大升级”!蓝牙云屏客户对你的设备爱不释手

    用户体验“大升级”!蓝牙云屏客户对你的设备爱不释手​ “客户又投诉了,说设备操作太麻烦!” 这是不少仪器仪表厂家的烦心事。传统设备的操作界面往往刻板生硬:按钮密密麻麻,按错一个就要从头再来;参数
    的头像 发表于 10-16 16:49 646次阅读
    用户体验“大升级”!蓝牙云屏<b class='flag-5'>让</b>客户对你的设备<b class='flag-5'>爱不释手</b>​

    微波雷达模块广告投影灯降本增效

    在商场步行街的夜晚,投影灯把品牌Logo投射在地面,光影流转间诉说着商家的期待。但问题是——当广告常亮,谁还会多看一眼?当电表持续转动,谁来为这份"无效曝光"买单? 智能照明行业正在经历一场从"工具
    的头像 发表于 10-11 16:28 667次阅读
    微波雷达模块<b class='flag-5'>让</b><b class='flag-5'>广告</b>投影灯降本增效

    E-GaN充电器芯片U8765产品概述

    电竞手机是游戏玩家心中的“战场利器”。与普通手机相比,电竞手机极致的性能和炫酷灯效,都让人爱不释手。尽管有的厂商匹配了双腰电池,但对电量长续航要求更为严苛的电竞手机,更需要一个快速充电器来帮忙。搭载了E-GaN充电器芯片的充电器,正符合此需求!
    的头像 发表于 07-25 17:38 1509次阅读

    儿童玩具音效单调?NV400F 芯片产品秒变 “互动小明星”

    +灵活录放+超低功耗”的核心优势,已帮助500+玩具企业打造出爆款产品,普通玩具摇身一变成为孩子爱不释手的“互动小明星”!NineChip语音芯片NineChip
    的头像 发表于 07-24 09:01 722次阅读
    儿童玩具音效单调?NV400F 芯片<b class='flag-5'>让</b>产品秒变 “互动小明星”

    Redis集群部署配置详解

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

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

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

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

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

    Redis 再次开源!

    “  Redis 现已采用 AGPLv3 开源许可证。  ” Redis CEO 的 Blog 以下是 Redis CEO Rowan Trollope 的 Blog: 像 AWS 和 GCP 这样
    的头像 发表于 05-06 18:26 1066次阅读