5-1 你们项目中签到为什么要使用bitmap
因为bitmap相对于MySql而言节省空间并且计算效率也高。
bitmap是一种数据结构,存储数据以二进制(bit位)为单位进行存储,并且每个位只对应一个状态。
我们在项目中使用bitmap是因为在我们设计的签到功能中,0表示未签到,1表示已签到,使用bitmap后,一个用户一个月只需要保存1条记录,大大的节省了存储空间。
总的来说,使用bitmap存储签到信息可以大大提高我们项目的效率和性能。
5-2 你们项目中积分功能是如何实现的
在我们的项目中积分功能主要涉及学习微服务,其中签到、学习、写问答、写笔记、写评价都可以获得积分。
为了解耦合,我们使用了MQ,生产者一方发送消息,消费者则监听消息,消息主要包括:用户id,增加的积分,类型。
监听到消息后,判断下当前这种获取积分的方式有没有积分上限,没有的话直接保存积分记录。
有积分上限的话:先从库中查询一下,当前这种方式今天已经获取多少积分了,如果超出了每日上限就结束。
如果没有超出:则判断一下,今天当前这种方式获取的积分 + 本次的积分是否大于每日上限,如果大于则只保存欠额部分。
5-3 Redis三大新面试点: 跳表、pipeline、bitmap
跳表
跳表是一种数据结构,用来实现有序集合zset数据类型。它具有类似平衡树的性能,通过使用多层次的指针来快速定位元素,从而实现快速的查找、插入和删除操作。
跳表的优点包括简单、高效的查找、插入和删除操作,以及相对容易实现。
跳表的缺点是占用更多的内存空间,并且在高并发写入的情况下可能会导致性能下降。
跳表是一种高效的数据结构,适用于实现有序集合。
pipeline
在Redis中,Pipeline是一种用于批量执行多个命令的机制。通过使用Pipeline,客户端可以将多个命令打包发送给服务器,然后一次性获取所有命令的执行结果,从而减少了网络延迟和提高了性能。
bitmap
bitmap是以二进制(bit位)的形式进行存储,每个位代表一个布尔值(0或1)。
bitmap通常是使用字符串类型来存储的,每个位可以表示某种状态或者事件的发生。
这种存储方式使得bitmap在处理大量数据统计和判断时,可以只占用非常小的一部分内存,并且计算速度非常高效。使用场景有记录用户的行为、统计用户的活跃情况等。
bitmap是一种高效的数据结构,可以处理大规模的布尔型数据。