tjxt第五天

本文介绍了项目中使用Bitmap节省空间存储签到记录的方法,以及如何利用Redis的Bitmap数据结构处理积分功能。同时,讨论了Redis的跳表和pipeline在性能提升中的作用。
摘要由CSDN通过智能技术生成

5-1 你们项目中签到为什么要使用bitmap
签到用bitmap可以节省空间。
通过观察签到表的设计,我们会发现一条签到记录就会占用22个字节,而我们每天的签到记录有很多,这样会浪费空间
为了节省存储空间,我们可以使用类似于下面的结果保存某个用户一月份的打卡记录
它把每一个bit为对应月的每一天,形成映射关系,用0和1分别标识是否打卡,这种思路称为bitmap(位图)
而我们的redis中恰好提供了bitmap的数据结构和相关操作命令,我们可以直接使用。
在Redis中,bitmap底层还是基于String类型实现的,存储数据是以二进制(bit位)为单位进行存储的
bitmap在处理大量数据统计和判断时,可以只占用非常小的一部分内存,而且计算速度非常高效!

5-2 你们项目中积分功能是如何实现的
积分功能实现有两个,分别是新增积分,和查询积分
新增积分:
修改SignRecordServiceImpl中addSignRecords方法,添加发送积分消息的代码;
修改InteractionQuestionServiceImpl中saveQuestion方法,添加发送积分消息的代码;
监听消息:
接下来,就可以去编写消息监听器了。5种不同积分获取方式,需要5种消息监听器,这里我们先实现两个:签到 写互动问答
在tj-learning模块定义一个消息监听器类,两个监听方法,分别是listenSignInMessage和listenWriteReplyMessage。着两个监听方法都会调用pointRecordService的addPointsRecord方法去保存积分记录。
在PointRecordServiceImpl中,会首先判断是否有积分上限
,如果没有会保存积分记录,然后结束
,如果有积分上限,会查询今日已得积分,如果超过每日上线,直接结束,如果没有超过每日上线,会保存积分记录然后结束。

查询积分的关键点是会分组统计我今天获得的积分

5-3 Redis三大新面试点: 跳表、pipeline、bitmap
跳表:
跳表(SkipList)首先是链表,但与传统的链表相比有几点差异:
1.调表结合了链表和二分查找的思想
2.元素按照升序排列存储
3.节点可能包含多个指针,指针跨度不同
4.查找时从顶层向下,不断缩小搜索范围
4.整个查询的复杂度为O(log n)
Redis数据类型Sorted Set使用了调表作为其中一种数据结构
pipeline:
在Redis中,Pipeline是一种用于批量处理执行命令的机制,可以减少客户端和服务器之间的通信开销,提高性能。通过Pipeline,客户端可以将多个命令打包发送到服务器端执行,然后一次性获取所有命令的执行结果。

bitmap:
见第一题

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值