5-1 你们项目中签到为什么要使用bitmap
通过观察我们的签到表可以看出一条签到记录会占用很多字节,而我们每天的签到记录有很多,这就会浪费很多的储存空间,为了节省空间,我们可以使用Redis中提供好了的bitmap的数据结构和相关操作命令
在Redis中,bitmap底层还是基于String类型实现的, 存储数据是以二进制(bit位)为单位进行存储的
bitmap在处理大量数据统计和判断时,可以只占用非常小的一部分内存,并且计算速度非常高效!
总之,使用Bitmap在Java项目中实现签到功能可以提高效率并节省内存空间,但需要根据实际情况进行选择和优化。
5-2 你们项目中积分功能是如何实现的
在我们的项目中积分功能是一个单独的微服务,用户可以根据自己的不同操作来获取积分的,比如,用户可以签到,刷视频,发表评论,用获得的积分来兑换优惠券,或者是参加排行榜
用户签到我们可以设置为,用户每签到一天可以获得一点积分的奖励,当用户连续签到7天14天或者20天,我们可以给出相应的积分奖励,我们可以根据用户的id,用户连续签到的天数,以及当天签到的积分,计算出用户这次签到,可以获得多少积分,
当用户,刷视频,和发表评论的时候,也可以获得积分,当然了我们必须给这些获得积分的操作,设置一个阈值,当超过这个阈值的时候用户就不会再获得积分了,为了防止有人恶意刷取积分,
以上就是积分微服务的实现
5-3 Redis三大新面试点: 跳表、pipeline、bitmap
跳表:
Redis的跳表是一种有序数据结构,用于在有序集合中快速查找和插入元素。它是基于链表的扩展,通过在链表中添加多级索引来提高查找效率。
在 Redis 中,跳表被用于实现有序集合数据类型,它允许快速的按分数(score)进行范围查询和遍历操作。这使得 Redis 的有序集合能够高效地支持诸如排行榜、计分板等功能。
总之,Redis中使用跳表作为有序集合的实现之一,因为它能够在平均情况下提供较快的插入、删除和查找操作。
Pipeline:
Redis Pipeline是一种用于高性能技术,它可以一次执行多条命令,而不必等待每个命令的相应。这种技术被称为流水线,而且无论你运行那个版本,都可以使用流水线,与Redis一起使用。
Redis Pipeline的主要优点就是可以大大的提高性能,他允许一次执行多条命令,而且不必等待每个命令的响应,因此它可以减少对网络延迟性能的影响,(例如:将许多元素添加到同一列表中,或者使用许多键填充数据库)。
总之,Redis中的Pipeline是一种批量执行命令的机制,允许客户端一次性发送多个命令给服务器,并在一次通信中获取所有命令的执行结果。这种机制可以减少通信的往返时间,提高系统的性能,特别适用于需要频繁与Redis服务器交互的场景。
Bitmap:
BitMap,即位图,使用每个位表示某种状态,适合处理整型的海量数据。本质上是哈希表的一种应用实现,原理也很简单,给定一个int整型数据,将该int整数映射到对应的位上,并将该位由0改为1。
在Redis中,bitmap底层还是基于String类型实现的, 存储数据是以二进制(bit位)为单位进行存储的
bitmap在处理大量数据统计和判断时,可以只占用非常小的一部分内存,并且计算速度非常高效!