1 你们项目中签到为什么要使用bitmap
在我们项目中,设计了每天签到积分系统,但是通过观察发现,每一条签到记录需要22个字节,且签到记录会很多,会浪费很多存储空间。为了节省存储空间,所以我们使用到了bitmap。
在Redis中提供了bitmap的数据结构和相关命令,bitmap的底层还是基于String类型实现的,存储以二进制bit位为单位进行存储,且bitmap在处理大量数据统计和判断是,只占很少的一部分空间,且计算速度高效。
这就是我们使用bitmap的原因。
2 你们项目中积分功能是如何实现的
在我们的项目中,使用的是异步的方式,将原先的业务与积分业务进行解耦合,而要实现服务间的解耦合需要使用到RabbitMQ。
首先在涉及到积分的代码块里使用MQ进行积分消息的代码发送,然后编写一个监听器,且涉及几种获取积分的方式,就需要几种监听器。最后根据接收到的消息内容,执行相应的积分增加或减少操作,并更新用户的积分信息。
在我们的项目中使用RabbitMQ可以实现积分功能的异步处理,提高系统的可扩展性和性能。
3 Redis三大新面试点: 跳表、pipeline、bitmap
-
跳表(Skip List):
跳表是一种数据结构,用于实现有序集合(Set)。它通过在元素之间建立多级索引来加速查找操作,类似于多层楼梯,可以快速跳跃到目标元素。
在Redis中,有序集合(Set)就是通过跳表来实现的。跳表允许快速的插入、删除和查找操作,时间复杂度为O(log n)。跳表的实现在Redis中是基于C语言的,通过跳表可以高效地实现有序集合的相关操作。
2.Pipeline:
Pipeline是Redis提供的一种机制,用于批量执行多个命令,减少客户端与服务器之间的通信开销。
通过Pipeline,客户端可以将多个命令打包发送给服务器,服务器执行完所有命令后再将结果一次性返回给客户端,从而减少了网络延迟和通信开销。
在需要批量执行多个命令时,使用Pipeline可以显著提高Redis的性能和吞吐量。
3.Bitmap:
Bitmap是一种位图数据结构,在Redis中通常用于处理大量的布尔值信息,例如用户的签到记录、在线状态等。
在Redis中,Bitmap通常是通过字符串来实现的,每个位代表一个布尔值,可以进行位操作(AND、OR、NOT等)来实现各种位级别的操作。
通过Bitmap,可以高效地存储和处理大量的布尔值信息,节省内存空间并提高处理效率。
总的来说,Redis中的跳表、pipeline和bitmap都是非常重要的特性和数据结构,它们分别用于实现有序集合、批量命令执行和位图操作,为Redis提供了高效的数据存储和处理能力。
文章介绍了项目中通过使用Bitmap节省存储空间以处理签到记录,利用RabbitMQ实现积分功能的异步处理,以及Redis中的跳表、pipeline特性在数据结构和性能提升上的作用。

被折叠的 条评论
为什么被折叠?



