基于redis的zSet集合做数据缓存实现分页查询 java

本文介绍了如何使用Redis的ZSet集合作为数据缓存,以优化新闻文章的分页查询,提高用户体验。通过在前端下拉加载和系统启动时预加载数据,结合Kafka处理实时更新,实现了高效的数据获取。使用ZSet的score保证数据有序性,通过reverseRangeByscore方法进行分页查询,显著提升了查询性能。
摘要由CSDN通过智能技术生成

      需求场景:最近公司要做手机页面展示新闻文章数据查询的优化工作,让我提个优化方案。现状是目前手机页面的数据请求系统后台,系统后台然后调用其他系统的接口,返回分页数据到前台展示,这样一来,用户每次下拉到页面底部加载更多数据都要调用其他接口,用户体验显然不是很好,那有没有更好的方案呢?

      优化方案:redis正好适合在这种场景下使用,用户每次下拉到页面底部,此时从前台页面到系统后台分页(假如每次取10条)取数据,可以直接到redis里取数据,如果redis返回的数据为空或者小于你要取的10条数据,那么调用接口取10条分页数据放入缓存,然后再从缓存里取数据返回到前台。这样的话,只有当其中一个用户第一次查询的时候会调用接口数据存入缓存,以后这个用户或者其他用户再看这个文章信息的时候,就是直接从缓存里取数据,就相当快捷,提高用户体验。经测试,之前每次调用接口在700~800ms左右,现在每次从缓存里取数据,只需要200ms左右,性能显然提升很大。

     前面只提到下拉到页面底部加载更多数据时的情况,其实我们当刷新最新的数据时,这时候该怎么处理呢?事实上系统后台用到了kafka消费者接收从其他后台实时发送的文章数据,这里接收的文章有三种类型:一种是add,就说明这个文章是新增的发布到手机页面的数据;一种是update,就说明这个文章是要更新已经发布的数据,最后一种是del,就说明这个文章是要从手机页面删除的。也就是说,我们一方面可以从接口获取历史的数据,另一方面可以实时获取最新的被发送来的新增文章数据(或者是要修改和删除的)。另外补充一点,为了提升用户一打开手机就能快速的看到新闻信息的体验度,我们在系统启动成功后,默认先调用接口存入缓存10条记录,这样,用户第一次进入手机页面默认就能先从缓存里取10条新闻信息。

    上面说了那么多业务,无非是两点,一:从缓存里获取分页数据;二:对缓存数据进行增删改查的操作。而redis定义了5种数据结构,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

 

下面来对这5种数据结构类型作简单的介绍(表格引用https://www.jianshu.com/p/7bf5dc61ca06文章里的):

结构 类型                 结构存储的值 结构的读写能力
String 可以是字符串、整数或者浮点数 对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement)
List 一个链表,链表上的每个节点都包含了一个字符串 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素
Set 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同 添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素
Hash 包含
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值