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

    文章

    73

    浏览量

    8111
  • Redis
    +关注

    关注

    0

    文章

    390

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

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

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

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

    Redis集群部署配置详解

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

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

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

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

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

    redis三种集群方案详解

    Redis中提供的集群方案总共有三种(一般一个redis节点不超过10G内存)。
    的头像 发表于 03-31 10:46 1282次阅读
    <b class='flag-5'>redis</b>三种集群方案详解

    惊天动地!树莓派有了这个系统,瞬间变智能硬件之王!

    各位技术爱好者,是不是已经对树莓派爱不释手了?这个小巧的单板计算机,不仅能做智能家居,还能搞物联网,简直就是“科技界的瑞士军刀”。但你知道吗?树莓派的强大,不仅仅在于硬件本身,还在于它背后强大的软件
    的头像 发表于 03-25 09:26 688次阅读
    惊天动地!树莓派有了这个系统,瞬间变智能硬件之王!

    Redis实战笔记

    在目前的技术选型中,Redis 俨然已经成为了系统高性能缓存方案的事实标准,因此现在 Redis 也成为了后端开发的基本技能树之一。   基于上述情况,今天给大家分享一份 杰哥 亲笔撰写的内部
    的头像 发表于 02-09 09:12 637次阅读
    <b class='flag-5'>Redis</b>实战笔记

    Redis Cluster之故障转移

    1. Redis Cluster 简介 Redis Cluster 是 Redis 官方提供的 Redis 集群功能。 为什么要实现 Redis
    的头像 发表于 01-20 09:21 1261次阅读
    <b class='flag-5'>Redis</b> Cluster之故障转移

    华为云Flexus X实例,Redis性能加速评测及对比

    随着云计算技术的飞速发展,Redis 作为一种高性能的内存数据库,在各种应用场景中发挥着越来越重要的作用。为了满足不同用户对 Redis 性能的高要求,华为云推出了 Flexus X 实例,并提供了
    的头像 发表于 12-29 15:47 835次阅读
    华为云Flexus X实例,<b class='flag-5'>Redis</b>性能加速评测及对比

    Redis缓存与Memcached的比较

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