简介:一种自定义的编码/解码方式,将聚合的业务数据转换为字符串,作为Redis的值保存。有效减少相同用户在不同业务数据记录中所使用的Key数量,节约Reids内存空间。成熟小工具,CV即可使用,拿走不谢。。
业务场景:为提升会员对当前等级的权益感知,需对用户仍未领取的权益进行弹框或运营位置展示推荐。会员需推荐权益有10+项,且每项权益均需记录当日推荐次数,并以此做推送限制。由于推送数据非核心数据,且需每日过期及快速查询,故采用Redis缓存记录推荐次数;
问题产生:由于会员数据庞大,如果将每个用户的每项权益都记入缓存,将占用大量内存空间。按照生产日活2000w数据计算,每个用户10项权益记录,将耗费20g内存空间。对Redis服务器内存造成很大的负担;
常规与压缩方案对比:举例数据(5项权益:生活特权、升级有礼、生日有礼、每月券包、注册有礼。用户ID:E7F0618DDE68470B8B332C2DA884320C)
1)常规做法:key键 = 前缀(RECOMMONE) + 会员号(USERID) + 权益编码(EQUITY_CODE),Value值 = 权益已推荐次数,会员每推荐成功一项权益,调用incrByLong函数将值增1。此会员5项权益均进行了推荐,Redis记录了其对应权益的推荐次数,记录的键值对数据如下:
表1:压缩前同一用户有5条权益推荐记录数据
2)压缩设计:key键 = 前缀(RECOMMONE) + 会员号(USERID) ,采用同一用户只记录一条权益推荐记录,提前确认权益推荐次数的最大值并分配占位位数,每项权益通过占位标识来获取。本业务需求中,权益推荐最大次数为单天12次,故需两个占位符来标识权益项。此时Redis记录数据:
表2:压缩后同一用户只有一条记录数
压缩后,单条记录value值为03050111041,每两位标识一项权益的已推荐数,拆解图如下:
如上图,每两个占位代表一项权益的推荐次数。03表示生活特权权益项已经推荐了3次、05表示升级有礼权益项推荐了5次,依次类推。使一个redis的string值聚合了多种业务意义,有效节省了redi