5-1 你们项目中签到为什么要使用bitmap
我们在项目中使用bitmap的原因有以下这些:
首先bitmap是Redis中的String类型里的一种类型,存储数据是以二进制(bit位)为单位进行存储的。在处理大量数据统计和判断时,只占用非常小的一部分内存,且计算速度非常高效。
其次bitmap节省空间,我们会发现一条签到记录就会占用22个字节,每天的签到记录有很多,这样会过于浪费空间,bitmap所占空间较小。因此我们的羡慕中使用bitmap来记录签到数据。
5-2 你们项目中积分功能是如何实现的
我们项目中的积分功能主要涉及学习微服务与积分微服务
我们项目是在单独一个微服务模块实现积分功能,用户签到、学习、互动问答、提交学习笔记等行为都可以产生积分(业务方面)。
用户操作涉及到积分变化功能时,响应的模块会投递消息到消息队列,而在微服务模块中会有监听器监听消息队列,消费消息,操作对应的数据库表。
以上就是我们积分功能的RabbitMQ实现流程。
5-3 Redis三大新面试点: 跳表、pipeline、bitmap
跳表:跳表是一种用于实现有序集合的数据结构,它通过添加多级索引来加速有序集合的查询操作。跳表的基本思想是在原始链表的基础上,添加额外的索引层。每个索引层都是一个有序的链表,每个节点包含只想下一层节点的指针。通过这些索引层,可以在教高级别的链表中跳过一些节点,从而快速地定位目标节点,从而提高查询效率。
Pipeline:Pipeline是一种数据处理模式,他将多个操作按照顺串联起来,形成一个管道,每一个操作都可以独立执行,不需要等待前一个操作执行完毕。这种模式可以有小的提高数据处理的效率,尤其是在需要进行大量计算或者IO操作的场景下。
bitmap:bitmap是一种数据结构,它使用位(bit)来表示数据。每个位只有两种状态:0或1.通过将一组数据映射到一个bitmap中,可以高效的表示和查询数据。bitmap可以用于实现各种功能,例如签到。积分等。通过bitmap,可以显著的减少存储空间和查询时间,提高系统的性能和可靠性。