redis占用内存过低_使用多种数据结构优化Redis 内存占用

本文探讨了如何解决广告平台中Redis内存占用过低的问题,提出了四种技术方案:1)优化key和value,减少8字节存储;2)使用hash结构,根据请求ID和上报类型作为field;3)利用set的intset特性,存储广告序号;4)应用bitmap位图,以一个value表示多个广告状态。总结中强调了减少key数量、优化key构造和选择合适数据结构的重要性。
摘要由CSDN通过智能技术生成

背景

广告平台 adx 在处理曝光/点击上报时,使用 redis 的 setnx 命令去重,其逻辑如下

  1. 构造一个形如 s:track:%d:%s:%s 的 key,参数分别是上报类型(曝光 or 点击),请求 id,广告位 id
  2. setnx(redisKey, timestamp)
    1. 若返回值不为 1,说明本次上报为重复上报
    2. 若返回值为 1,设置过期时间为 24 小时

现在的需求就是减少此项去重业务所占用的 redis 内存

技术方案

方案一:简单通用

  • value 置为 0,这样每个 key 节约了 8 字节
    • 说明:虽然时间戳是 10 位数字,但 redis 会以 8 字节整数形式进行存储
  • 简化 key,目前 key 的前缀太长,可以简化为 te/tc,表示曝光/点击上报
  • 用广告序号来构造 key,而不是用广告位 id 构造 key,这样还能兼容一个广告位填充多个广告的情况
  • 缩短过期时间

方案二:使用 hash

一次广告请求,实际上会导致多次广告上报

  • 可能返回了多个广告
  • 一个广告可能上报曝光和点击

如果一次下发了 10 个广告,每个广告都上报了曝光和点击,则要在 redis 里创建 20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值