2
回答
memcache如何加速列表分页?

segmentfault上问了一天也没人理会,是太简单了不屑于答么。。。

只好贴到这来,求前辈解答,谢谢!

---------------------------------------------------------------------------

最近刚开始接触和使用memcached,我的场景是这样的:

有一张表,假设叫 post:

id int(10)
user_id int(10)
title varchar(100)
description varchar(120)
body text

假设我把除了 body 以外的字段通过数组序列化存到 key 为 post-xxx(xxx为ID)的记录中,这样当取到 id = 333 的记录时,就可以直接 get('post-333') 然后反序列化来使用。

这个时候有个问题,即使我把 post 单条记录的字段全部缓存起来,能够加快的也只是我读取这单条记录时的速度,但是表数据越来越多时(暂不考虑分表分库),我的 post 列表分页依旧要到 post 表中去 LIMIT,我该如何设计一种方式来让 memcached 能够为我的 LIMIT 加速呢?

之前在没有 cache 时为了一定程度上加速列表分页的读取速度,我是将 text 类型的 body 字段分了张表,因为本身读取列表时也不需要 body,text 字段类型也太重。

我的设想:

1、无法到 memcached 中去 LIMIT,那我能做的就只有在去表中 LIMIT 时能够更快,那就单独建一张表,就只存放 post 的所有 ID,跟原先 post 表中的 ID 一一对应 。。。LIMIT 直接从这张表取,等到要取除其他字段时再到 memcached 里取。

2、memcached 能不能实现类似 LIMIT 的功能?

刚上手,可能问题有点小白了。。。不知道大家遇到这个问题是怎么实现的,有没有哪些优雅或者高效的方法?

举报
龙1987asd
发帖于3年前 2回/579阅
共有2个答案 最后回答: 3年前
我这边的项目和楼主的场景差不多,我都是缓存最新的1000条ID,从缓存中取出来程序分页,因为大多数人都不会翻页使劲的往后面翻页,所有1000条ID足够了(视情况而定),如果真的有翻到后面没在缓存里面的页数了直接查库
--- 共有 2 条评论 ---
调皮的XD回复 @龙1987asd : 更新频繁的数据不适合放缓存,那样缓存命中率很低,看看你们自己的业务场景,比如说,如果变化到一定的阈值,程序主动更新到缓存 3年前 回复
龙1987asd谢谢!还想问下,假设这个表更新比较频繁,缓存里的那1000个ID其实也是要不停的从库里取的吧? 3年前 回复
顶部