基于redis作缓存分页

 在实际业务中咱们会将一些热数据缓存到redis里面,这时候数据量比较大的话,咱们就要对这些热数据进行分页,分页的方式有2种:redis

第一:从redis拿出全部数据后,再作内存分页(不推荐),热点数据小的时候能够这样作,性能相差不是很大,可是当数据量大的时候,分页期间就会占用大量内存,或撑爆;缓存

第二:基于redis的数据结构作缓存分页,这里又分2种数据结构

①:基于redis的list数据结构,直接经过list的数据结构,用range方法能够进行分页,在数据量大的时候,性能也很可观,可是当存在接口高并发访问时,这个list可能会无限延长,且里面的数据会存在不少重复,这就会影响到正常的业务(不是很推荐);并发

②:基于redis的ZSet数据结构,经过Zset这个有序集合咱们也能够作分页,一样也是用range方法,可是这里比较麻烦的是在初始化数据的时候Zset必须存放TypedTuple类型的数据,这个类型是一个value和score的键值对,具体能够查百度,这个score的生成比较麻烦我这边测试时用的是当前数据在这个list的位置,而后Zset是根据这个score值来排序的,默认是从小到大;用这个的好处是,即便在高并发状况下Zset中也不会存在重复数据从而影响正常的业务;并且分页效率也和list结构差很少;高并发

③:用hash和Zset来一块儿实现;这个是问了一个朋友和得知的,Zset中存储有序的id字段,经过分页后拿到id,而后再用id去hash中取,感受应该效率相差不大的,只是中间多了层从hash结构取,还须要维护又一个hash;(为什么这样作我也不清楚);性能

贴一张我测试list和ZSet的结果图测试

相关文章
相关标签/搜索