记一次Redis bitmap导致的miss问题

redis-Bitmaps 基础概念:https://blog.csdn.net/qq_16399991/article/details/83512937

Redis 内存淘汰机制:https://blog.csdn.net/qq_16399991/article/details/83547286

背景描述

大致需求:脚本批量导入用户数据到redis中,使用bitmap标记用户是否在导入的白名单中。用户量级 亿。

过程描述

  •  运行脚本导入白名单用户
  • 5分钟后发现redis中有数据丢失
  • 发现redis内存沾满 ,停止导入脚本。删除导入的数据。但是有50G数据丢失。
  • 做后续数据还原

原因分析

  1. key使用了分片处理,把key分成了10w个, 每个key占用(1亿/10w=1000)个bit。理想是key1用于标记uid 为1-1000的用户,key2标记 uid为1001-2000的用户,以此类推...;
  2. offet但是没有做分片处理,就导致了 key1 占用1000个bit。key2占用了2000个bit,但是前1000个全是0记在key1,是无效的存储(因为前1000个用户全都标记存储在key1中)。以此类推,key3占中3000个bit,前2000个bit是无效的存储.....。key10w就占用了1亿个bit,但是只有最后1000个bit是有效的存储;
  3. redis配置的内存淘汰机制为。allkeys-lru:在主键空间中,优先移除最近未使用的key。

 

1亿占用redis内存计算就是(1亿bit + 1亿bit-1000bit + 1亿bit-2000bit ........+1000bit)。是等差数列,求和=5000050000000bit = 625006250000B=610357666 kb=596052M =582G, 远远超出了redis内存,触发redis淘汰机制。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值