redis缓存实现分页
在实际业务中,我们会将一些热点数据缓存在redis中。如果此时数据量比较大,我们会对热点数据进行分页。分页有两种方式:
第一种:从redis中取出所有数据后,进行内存分页(不推荐)。当热点数据较小时可以这样做。性能差异不是很大,但是当数据量很大时,分页时会占用大量内存,或者可能会爆;
第二种:基于缓存的分页redis的数据结构,这里分为两种
①:基于redis的列表数据结构,可以直接通过列表数据结构和range方法进行分页。当数据量很大的时候,性能也很令人印象深刻,但是当接口有高并发访问时,这个列表可能会无限延长,数据会出现很多重复,影响正常业务(不太推荐);
② :基于redis的ZSet数据结构,通过Zset,有序集合我们也可以做分页,同样使用range方法,但是这里比较麻烦的是,在初始化数据的时候,Zset必须存储TypedTuple类型的数据。该类型是值和分数的键值对。具体可以百度一下,这个分数的生成很麻烦。我这里测试的时候,使用的是当前数据在这个列表中的位置,然后Zset按照score值进行排序。默认是从小到大。使用这个的好处是,即使在高并发的情况下, Zset 里面也不会出现重复数据,影响正常业务;分页效率与链表结构类似;
③:使用hash和Zset进行im一起补充;我问了一个朋友,了解到了这一点,有序的id字段存储在Zset中。分页后得到id,然后用id从hash中取出。感觉效率应该是差不多的,只是中间多了一层从hash结构中取出来,需要维护另一个hash; (我不知道为什么要这样做);
发布我的测试列表和 ZSet 的结果图片
关于redis缓存这里分享分页实现就全部了。希望以上内容能够对大家有所帮助,帮助大家学习更多的知识。如果您觉得文章不错,可以分享出去,让更多的人看到。
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > redis缓存实现分页