Redis键设计

3
我想知道在Redis中我们“设计”键的方式是否会影响性能和可扩展性。例如,如果我将与“用户”相关的内容存储在像“user:<user_id>”这样的键下,将与组相关的内容存储在像“group:<group_id>”这样的键下,则所有键都以"user:""group:"开头。
这样做会对Redis内部哈希键的方式产生负面影响吗?
2个回答

7
没有负面影响。正如你提到的设计在Redis官方文档中被推荐,这些文档非常清楚:

非常长的键不是一个好主意,比如一个1024字节的键是一个坏主意...

但是,请往下看:

非常短的键通常不是一个好主意。如果您可以写出"user:1000:followers"而不是写成"u1000flw"作为键,那么前者更容易阅读,且所占空间相对于键对象本身和值对象而言微不足道。虽然短键显然会占用少一点的内存,但您的工作是找到正确的平衡点。

尝试坚持一个模式。例如,"object-type:id"是个不错的想法,如"user:1000"。点或破折号通常用于多词字段,如"comment:1234:reply.to"或"comment:1234:reply-to"。

(强调是我的。)
另请参见:Redis键命名约定? 由于Redis基本上是底层使用哈希表的,因此没有类似于SQL风格的WHERE。那就是坏设计会影响性能的地方。

3

不,像这样给你的键加前缀是没有问题的。Redis在内部使用哈希表,而哈希表又使用了适当的哈希函数(如果我记得正确的话,其中一个是murmur哈希),这些函数不会因为前缀而改变。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接