Redis密钥设计

Tho*_*iss 3 redis

我想知道我们在 Redis 中“设计”键的方式是否会影响性能和可扩展性。例如,如果我将与“用户”相关的内容存储在诸如 之类的键下,"user:<user_id>"并将与组相关的内容存储在诸如 之类的键下,那么我的所有键都将以或"group:<group_id>"开头。"user:""group:"

这会对 Redis 内部散列键的方式产生负面影响吗?

Ada*_*yer 7

没有负面影响。正是您提到的设计是Redis官方文档中推荐的,对此非常明确:

太长的密钥不是一个好主意,例如 1024 字节的密钥就是一个坏主意......

但是,请继续阅读:

太短的键通常不是一个好主意。如果你可以写“user:1000:followers”,那么写“u1000flw”作为键就没有什么意义了。与键对象本身和值对象所使用的空间相比,后者更具可读性并且增加的空间较小。虽然短键显然会消耗更少的内存,但您的工作是找到合适的平衡点。

尝试坚持一个模式。例如,“object-type:id”是一个好主意,如“user:1000”。点或破折号通常用于多字字段,如“comment:1234:reply.to”或“comment:1234:reply-to”。

(强调我的。)

另请参阅:Redis 键命名约定?

由于它本质上是一个哈希表,因此没有任何类似于 SQL 风格的东西WHERE。这就是糟糕的设计可能影响性能的地方。