利用redis缓存热门数据,分页的一种思路

转载 2016年08月29日 16:14:26

普通分页

一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。

如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了。

比如像微博这样的场景,微博下面现在有一个顶次数的排序。这个用传统的分页方式很难应对。

一种思路

最近想到了另一种思路。

数据以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列表。

其它的一些东东:

Lua是支持LRU模式的,即像Memcached一样工作。但是貌似没有见到有人这样用,很是奇怪。

可能是用redis早就准备好把redis做存储了,也不担心内存的容量问题。

利用redis缓存热门数据,分页的一种思路

普通分页 一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。 如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了。 比如像微博这样的场景,微博下面现在有一个顶次...

java 内存数据的条件筛选和分页处理

/**  * 从内存中查找需要的商品信息  *   * @author: Santy  * @date: 2015年7月15日 */ @SuppressWarnings("unchec...

利用redis缓存对 list集合中的数据 进行分页操作(一)

先说 存储的结构:  这里做了两块缓存  绿色是存储索引的缓存  黑色是存数据的缓存 翻页时需要两个参数  向上查询/或向下查询    还一个是   从第二页开始查询时需要一个索引的参数 有了这两...

利用redis缓存对 list集合中的数据 进行分页操作

先说 存储的结构:  这里做了两块缓存  绿色是存储索引的缓存  黑色是存数据的缓存 翻页时需要两个参数  向上查询/或向下查询    还一个是   从第二页开始查询时需要一个索引的参数 ...
  • lyhjava
  • lyhjava
  • 2016年11月30日 17:24
  • 1195

SUI Mobile中解决分页js和css的一种思路

范例下载:SUI Mobile执行路由页面的JS和CSS范例 初次接触MSUI,对其ajax刷新页面的效果很满意。但是在团队开发中,却发现在使用路由时,却发现框架并不引入路由页面的css,更不执行页面...

Redis学习笔记(九)redis实现时时直播列表缓存,支持分页[热点数据存储]

需求说明在直播平台中,用户查看直播列表,这个列表数据具有时时性,并且是强热点数据,也就是说每时每刻都可能会有新的直播。这些数据如果每次都去数据库读取肯定是不可取的,所以这可以考虑使用redis来实现。...

redis value为对象的排序、分页的一种实现

-------基于HBase存储引擎并实现了排序、分页的Redis缓存策略   思路: 1、  当前系统缓存json,根据key存取value,key 和value都是String类型,直...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用redis缓存热门数据,分页的一种思路
举报原因:
原因补充:

(最多只允许输入30个字)