【问题标题】:Which data-store to use, to store meta data corresponding to the keys in memcache?使用哪个数据存储来存储与 memcache 中的键对应的元数据?
【发布时间】:2012-06-01 07:11:31
【问题描述】:

我有一个 memcache 后端,我想添加 redis 来添加 memcache 键的元数据。 元数据如下: Miss_count:数据不在内存缓存中的次数。 Hash_value:memcache中key对应的数据的hash值。

Data in memcache : key1 ::: Data
Meta data (miss count) : key1_miss ::: 10
Meta data (hash value) : key1_hash ::: hash(Data)

请提供帮助,因为当我将元数据存储在内存缓存本身中时,元数据在其到期时间之前被删除,因为元数据的大小很小并且slab分配正在分配一个小小的记忆夹。

【问题讨论】:

    标签: memcached redis datastore


    【解决方案1】:

    随着元数据会随着时间的推移而增加,redis的hash概念会失效。因此应用客户端逻辑来查看是否满足 max_zipped。

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的用例,我怀疑 Redis 可能是一个不错的选择。假设您将定期更新与各种散列相关的元数据未命中计数,您可能希望使用 Redis 排序集。例如,如果您希望将未命中计数存储在名为“misscounts”的排序集中,则添加/更新这些计数的 Redis 命令将是一个并且相同:

      zadd misscounts misscount key1

      ... 因为 zadd 如果条目不存在则添加该条目,或者如果存在则覆盖现有条目。如果您在每次发生未命中时触发的进程中有一个挂钩,则可以改用:

      zincrby 错误计数 1 个 key1

      类似于 zadd 命令的行为,如果一个条目不存在,zincrement 将创建一个新条目(使用增量值作为计数),或者如果一个条目存在,则将现有计数增加您传递的增量值。

      Redis 命令的完整文档可以在here 找到。 Redis 中不同类型存储选项的描述详见here

      哦,还有最后一点。以我的经验,Redis 很糟糕。很抱歉诅咒(大写),但根本没有其他方法可以做到 Redis 正义。我们称我们的 Redis 服务器为“蜜獾”,因为当负载开始增加并且我们的其他服务器开始自动扩展时,蜜獾根本不会在意。

      【讨论】:

      • 我希望元数据作为键值对,而不是在集合中。因此,如果我必须使用它,我将使用 hset 来节省内存,因为此元数据用于两端。一方面,它被应用程序用作键值对,另一方面,某个顶部错过的计数用于处理。在这种情况下,我也应该继续使用 redis 吗?
      • 嗯...我不确定我是否完全遵循。但我已经相当广泛地使用了各种 sql 数据库、cassandra、memcached、apc 和 redis,我只是喜欢 redis。我觉得可用的功能选项足够强大......除非有一个性能考虑让你需要水平扩展......这可能不是一个糟糕的方式去这样的事情。确保您了解控制持久性/持久性的配置选项redis.io/topics/persistence
      猜你喜欢
      • 2019-12-27
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2014-04-07
      • 2018-01-12
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多