原来Redis两条命令就能实现简单分页啦!你Get到了吗?

开发有时候为了减少数据库的压力,常常要使用Reids缓存,但是Reids基于内存而且单线程,所以最忌讳的就是大key,大value来给造成阻塞。所以常常有时候我们需要使用Reids分页来实现大数据量存储。 比如:微博评论等等。

如何实现Reids分页?

分页其实很简单,在关系型数据库Mysql等中,只需使用 limit 关键字,就可以很简单的实现分页,插入起始索引,查询数目就可以完成。当然分页大致就是如此,那么Reids能否也利用这样的形式去实现呢? 当然是可以的,但是Redis本身是不支持直接分页的,所以我们可以考虑使用其本身的数据结构,来实现分页。那么我们需要考虑的是,查询数目我们可以决定,那么分页的索引怎么保证呢?还有数据格式该如何存储呢? 其实这两单保证,我们就可以很愉快的实现分页啦!!

选取数据结构!

索引:

   其实索引,简单来说也就是每条数据的id,记录id。Redis提供了List,Zset两种数据结构,这就可以很愉快的让我们存储id来实现记录,并且我们都知道List集合本身支持subline截取,这样利用二者的特性我们就可以记录索引。Zset同理可能比这个更完美一些,但是大致也是一样。

redisTemplate.opsForList().range(key, start, end);

range特性,我们就可以很愉快的截取对应的id集合。

对象:

  其实对象,也就是我们数据库中的一条条记录,当然,我们开发中最常用的格式就是JSON,这就很简单了,本身Redis的Hash结构完美的支持了我们的这种格式。 key,item,value三者的属性,key作为id,item作为每个属性的key,value是具体的属性值,这样一条记录,就完美的落入到了Redis中。

实现分页!

 redisTemplate.opsForHash().get(key, item)

我们根据List获取到了分页key,然后去拿去分页的对应数据,我使用的是item存id,外面大key作为统一的一个KEY,每个人可以根据实际业务具体定义。

redis两条简单的命令和数据结构就完美支持了分页。当然需要注意一点,就是如果id很多的话,可以考虑使用分段存储,来避免大value的出现。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值