为了账号安全,请及时绑定邮箱和手机立即绑定

如何将分页数据 放入redis

如何将分页数据 放入redis

拉丁的传说 2018-10-29 05:00:36
如何将分页数据 放入redis
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

普通分页
一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。
如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了。
比如像微博这样的场景,微博下面现在有一个顶次数的排序。这个用传统的分页方式很难应对。
一种思路
最近想到了另一种思路。
数据以ID为key缓存到Redis里;
把数据ID和排序打分存到Redis的skip list,即zset里;
当查找数据时,先从Redis里的skip list取出对应的分页数据,得到ID列表。
用multi get从redis上一次性把ID列表里的所有数据都取出来。如果有缺少某些ID的数据,再从数据库里查找,再一块返回给用户,并把查出来的数据按ID缓存到Redis里。
在最后一步,可以有一些小技巧:
比如在缺少一些ID数据的情况下,先直接返回给用户,然后前端再用ajax请求缺少的ID的数据,再动态刷新。

还有一些可能用Lua脚本合并操作的优化,不过考虑到Lua脚本比较慢,可能要仔细测试。
如果是利用Lua脚本的话,可以在一个请求里完成下面的操作:
查找某页的所有文章,返回已缓存的文章的ID及内容,还有不在缓存里的文章的ID列表。

查看完整回答
反对 回复 2018-11-16
  • 1 回答
  • 0 关注
  • 1207 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信