5-1你们项目中为什么要使用bitmap
bitmap在处理大量数据统计和判断时,可以只占用非常小的一部分内存,并且计算速度非常高效。
在项目中,我们把bitmap的每一个bit设为对应当月的每一天,形成映射关系,用0和1分别标识是否打卡。这样我们就可以将一位用户整个月份的签到记录存放到一条数据中,大大节省其内存占用。
而我们的redis中恰好提供了bitmap的数据结构和相关操作命令,我们可以直接使用。
补充:在Redis中,bitmap底层还是基于String类型实现的, 存储数据是以二进制为单位进行存储。
5-2 你们项目中积分功能是如何实现的
在的我项目中积分微服务是一个独立且通用的微服务,可以通过签到、课程学习、评价、问答和笔记等方式获取积分,主要流程如下:
首先,在签到和问答对应的微服务中找到获取积分的业务,向MQ投递消息。消息主要包括:用户id、增加的积分、增加积分的类型;
其次,在学习微服务模块中编写对应的监听器监听不同微服务相应的队列,消费消息;
在编写程序时:
第一步先判断当前积分类型是否有获取上限,如果有,根据上限确定本次积分保存大小;
第二步查询数据库中对应类型今日已经获取的积分,与对应类型每日上限进行判断,如果该积分大于等于对应类型的积分上限,则直接返回;如果该积分加上增加的积分大于等于对应类型的积分上限,则增加的积分等于该类型上限积分减去查询的积分;
最后把这条记录保存到数据库中;
以上就是我项目中积分功能的实现
5-3 Redis 2024三大新面试点: 跳表、pipeline、bitmap
跳表是一种数据结构,它通过在有序链表上方建立多层索引来提高查找效率。Redis 中的有序集合ZSet就是使用跳表来实现的,其集合中的元素按照分数score有序排列。
跳表由多层链表组成,通过在不同层次建立索引,实现了快速的查找,在实际使用中,跳表的特性使得有序集合在查找、插入和范围查询等操作上表现得较为高效。
总之,跳表的使用在Redis中主要体现在有序集合的实现上,提供了对有序集合进行高效操作的手段。
5-4 什么是pipeline
在Redis中,pipeline是一种用于批量执行多个命令的机制,它可以在一个网络往返中发送多个命令,并在一个网络往返中接收它们的响应,这样减少了网络往返的次数和网络开销,可以大大提高性能。
总之在实际应用中,pipeline通常用于批量写入或读取大量数据时,以及需要原子性操作的场景。
5-5 什么是bitmap
在Redis中,bitmap是一种数据结构,用于存储位集合或位图;它是一个由二进制位组成的数据结构,其中每个位都是用0和1进行存储;每个位表示某种状态或标志。
由于每个位只占1个bit,在存储信息时非常节省空间;
bitmap的使用场景也有很多,例如:用户在线状态(0离线、1在线)、用户签到记录(0当天未签到、1当天已签到)等等。
总之,bitmap是一种简单而高效的数据结构,通常用于判断某个数据是否存在