实战五

本文探讨了如何通过Redis的bitmap和skiplist高效存储签到数据,减少空间浪费,并介绍了如何通过MQ实现积分功能,同时关注上限控制。此外,还提及了RedisPipeline在提高性能方面的应用。
摘要由CSDN通过智能技术生成

签到中如何设计签到表?为什么这么设计?

        签到的主要功能就是记录那个用户什么时间进行了打卡这样一个动作。

        我们使用redis中的bitmap位图来存储签到表数据。以用户id和签到日期为key,value部分以二进制为单位存储,正好可以映射成为月份下的每一天,0和1刚好可以表示打卡和未打卡两种情况。如果是按照传统的在mysql中建表,虽然可以正常运行,但是每条签到记录都会占用差不多22个字节的空间,常年累月的积累下来,就会造成空间的浪费。而采用bitmap存储,一个人一个月的签到记录最多也只占用31bit,差不多4个字节。不仅节约空间,而且效率也会更高。

如何开发一个积分功能?

        单独创建积分微服务,借助MQ来实现。(引用的地方不多,比如整个项目只有某一个服务用到积分,可以直接在该服务中创建积分明细表进行操作的)。

        然后,根据积分规则,在相关的业务层,向MQ 发起消息。比如,在签到中,每次打卡成功后,向MQ投递一个消息,积分微服务作为消息消费者监听MQ,一旦监听到消息,就新增积分。在新增积分的时候,考略到一些业务积分是有上限的,比如学习,提问这些都要设置上限,避免用户无休止的刷积。所以,我们在新增的时候,都会先判断是否存在上限,如果没有,直接保存积分记录即可;如果有,我们还要根据当天的积分获取情况与上限进行判断,超过了不予添加,只要没有达到上限,才能添加积分。

redis 跳表

  跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针从而达到快速访问节点的目的。

redis pipeline

Redis的执行包含发送命令命令排队命令执行结果响应四个步骤,一条一条的执行,UI影响性能,这与Redis的高性能背道而驰。而Pipeline ,就可以Redis 命令进行组装,通过一次传输给 Redis 并返回结果集效果和MySql的批量操作类似。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值