【问题标题】:Should I store item rating and item data in separated memcache keys?我应该将项目评级和项目数据存储在单独的内存缓存键中吗?
【发布时间】:2010-02-22 13:43:52
【问题描述】:

假设我们有一些物品,这些物品可以被用户评分。我应该将商品评分和商品数据存储在不同的内存缓存键中吗?

从逻辑上讲,我们应该将评分排除在主要项目数据之外,因为项目数据很少更改,但评分更改更频繁。当有人对项目进行评分时,我应该只使项目评分键无效,而不是整个项目。

我为什么要问这个问题?例如,我每页有 100 个项目....

  1. 我正在获取此页面的项目 ID = 1 个内存缓存“查询”
  2. 我正在获取页面上每个项目 ID 的项目数据 = 100 个内存缓存“查询”
  3. 我正在获取页面上每个项目 ID 的项目评级 = 100 个内存缓存“查询”

总计:201 个内存缓存“查询”

将项目评分与主要项目数据一起存储在一个键中,我们将仅获得 101 个内存缓存“查询”

那么,最佳做法是什么? 我真的很担心每页内存缓存“查询”的数量。或者我不应该担心?

谢谢。

【问题讨论】:

  • 如果我们添加“最喜欢的时间”、“cmets 的数量”等 - 我们将拥有更多的内存缓存“查询”。中庸之道在哪里?
  • 或者我们可以通过更改缓存数据而不是删除整个键来避免缓存失效?

标签: memcached


【解决方案1】:

Memcache 允许将键数组放入 get() 方法。

(俄语)http://highload.com.ua/index.php/2009/08/05/memcache-multi-get-%D0%B7%D0%B0%D1%87%D0%B5%D0%BC/

Fetched 15000 objects with standard get in 0.47441411018372s - using get
Fetched 15000 objects with multiple get in 0.023789882659912s - using multi get

【讨论】:

    【解决方案2】:

    如果您将单独保存项目评级,您将无法按它进行排序。最好使用 mysql innodb 表(如果你真的需要按等级排序)来达到这个目的(它经过优化以处理高并发和大写负载)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2010-09-12
      • 1970-01-01
      相关资源
      最近更新 更多