day5--1.18 bitmap+积分

5-1 你们项目中签到为什么要使用bitmap

1.原因:我们项目中要实现一个积分的功能,而签到获取积分是重点解决对象,最初设计了签到表。通过观察签到表,我们会发现一条签到记录就会占用22个字节,

每天的签到记录有很多,这样会很浪费空间 ,为了节省存储空间,所以选择使用bitmap。

2.思路:把每一个bit为对应当月的每一天,形成映射关系,用0和1分别标识是否打卡。

bitmap在处理大量数据统计和判断时,可以只占用非常小的一部分内存,并且计算速度非常高效!而我们的redis中恰好提供了bitmap的数据结构和相关操作命令,可以直接使用。


5-2 你们项目中积分功能是如何实现的

在我们项目中,积分是一个独立通用的微服务。用户签到、学习、互动问答、提交学习笔记等行为都可以产生积分【业务方面】。

下面是积分的实现方式:
1.首先,我们设置了专门的监听器,监听队列并将数据保存到库中。当用户获得积分时,会向rabbitmq中发送消息(编写程序监听MQ,消费消息,消息主要包括:用户id,增加的积分,类型)。

2.然后,保存时判断是否为每日签到,非每日签到类型每日都有积分上限。积分值与行为类型有关,不同类型的操作获得不等的分数

如果不是每日签到,则查询数据库中用户今天某种行为方式已经获得的积分,如果该积分大于等于该类型每日积分的上限,直接返回;如果该积分加上奖励增加的积分大于等于该类型每日积分的上限,那么就把增加的积分改为上限减去查询的积分

以上就是积分功能的大致实现思路。

补充Redis:

跳表:zset底层数据结构,建立多层索引,快速查找。

优点:简单、高效的查找、插入和删除操作,以及相对容易实现。

缺点:占用更多的内存空间,并且在高并发写入的情况下可能会导致性能下降。

pipeline(管道):redis的批量操作。保存数据时,一个请求中所有数据一起发送,一次性接收所有的响应。总之,pipeline是一种用于批量执行命令的机制,能够显著提高Redis操作的效率,特别适用于需要批量操作的场景,比如批量写入数据、批量读取数据等。

bitmap(位图):

1.布隆过滤器是一种空间效率很高的概率型数据结构,它可以用位图来表示数据的存在与否。布隆过滤器常用于判断一个元素是否可能存在于一个集合中,比如在缓存系统中用于判断某个数据是否存在于缓存中。例如,可用于签到。

2.位图还可以用于实时统计,比如统计网站的访问量、用户活跃度等信息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值