当前位置:  开发笔记 > 编程语言 > 正文

memcached数据缓存的设计模式

如何解决《memcached数据缓存的设计模式》经验,为你挑选了0个好方法。

在现有数据库查询周围包装可选的memcached缓存很容易.例如:

旧(仅限DB):

function getX
    x = get from db
    return x
end

新(带memcache的DB):

function getX
    x = get from memcache
    if found
      return x
    endif

    x = get from db
    set x in memcache
    return x
end

但问题是,并不总是如此缓存.例如,请执行以下两个查询:

-- get all items (recordset)
SELECT * FROM items;

-- get one item (record)
SELECT * FROM items WHERE pkid = 42;

如果我使用上面的伪代码来处理缓存,我会将项目42的所有字段存储两次.一旦进入大记录集并且一次独立.而我宁愿做这样的事情:

SELECT pkid FROM items;

并缓存PK的索引.然后单独缓存每条记录.

总而言之,最适合数据库的数据访问策略并不完全适合内存缓存策略.因为我希望memcache层是可选的(即如果内存缓存已关闭,网站仍然有效)我想要两全其美,但为了这样做,我很确定我需要维护一个很多查询有两种不同的形式(1.获取索引,然后是记录;以及2.在一个查询中获取记录集).分页越复杂.使用DB,您可以执行LIMIT/OFFSET SQL查询,但是使用memcache,您只需获取PK的索引,然后批量获取数组的相关切片.

我不确定如何整齐地设计这个,有没有人有任何建议?

更好的是,如果你自己反对这一点.你怎么处理它?

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有