【发布时间】:2019-11-15 11:34:12
【问题描述】:
我是 Redis 新手。我有一个场景,我需要将数百万个项目放在 Redis 缓存中以供以后查找。每个条目也需要过期,如果它在一段时间内没有使用。
一种方法是,一个带有字段和值的 HMSET,另一个 HMSET 来跟踪到期时间(大量的簿记)
第二个选项是为每个条目设置 HMSET,并为其设置到期时间。 (我猜很简单)。
我的问题,Redis 是否设计有数百万个 HMSET ?随着越来越多的 HMSET 被引入缓存的每个条目,它会降低 Redis 的性能吗? 一个后续问题。如果我要使用字符串数据类型,是否同样适用?
【问题讨论】:
-
这取决于您要如何检索它们。如果将 HGET 用于单个字段,则为 O(1),但 HMGET 为 O(N)。同样,单个字符串项的 GET 是 O(1),但 MGET 是 O(N):基本规则是您想要返回的数据越多,所需的时间就越长。这里似乎最简单的方法是在插入项目时设置 TTL,以便它们在某个时候自动过期,并在 GET 时重置 TTL,以便它们保持活动状态。
-
@howcheng 我想你误解了 HMGET 文档中清楚地写着 O(n) 是针对 n 个请求的字段,所以访问一个字段是 O(1)。这同样适用于 MGET。我的问题是澄清我是否需要将每个条目作为独立的(有点分散)或在一个地方进行簿记。阅读所有文档以了解 Redis 的内部工作原理需要花费太多时间。询问已经使用它或有机会理解它的其他人很容易。
-
是的,一个字段的HMGET与HGET相同。我没有误会;我只是假设如果您使用的是 HMGET/SET,那么您打算同时处理多个字段(因为这是这些命令的目的),
标签: .net-core redis stackexchange.redis