例如,我喜欢在Redis中使用冗长的名称set-allBooksBelongToUser:$userId
。
这样可以吗?还是会影响性能?
您正在谈论使用的密钥并没有那么长。
您提供的示例键用于一个集合,集合查找方法为O(1)。集合(SDIFF,SUNION,SINTER)上更复杂的操作是O(N)。可能的是,$userId
与使用较长的键相比,填充是更昂贵的操作。
Redis带有一个称为的基准实用程序redis-benchmark
,如果您修改src / redis-benchmark.c中的“
GET”测试,使其键仅是“ foo”,则可以在a之后运行短键测试make install
:
diff --git a/src/redis-benchmark.c b/src/redis-benchmark.c
--- a/src/redis-benchmark.c
+++ b/src/redis-benchmark.c
@@ -475,11 +475,11 @@
benchmark("MSET (10 keys)",cmd,len);
free(cmd);
- len = redisFormatCommand(&cmd,"SET foo:rand:000000000000 %s",data);
+ len = redisFormatCommand(&cmd,"SET foo %s",data);
benchmark("SET",cmd,len);
free(cmd);
- len = redisFormatCommand(&cmd,"GET foo:rand:000000000000");
+ len = redisFormatCommand(&cmd,"GET foo");
benchmark("GET",cmd,len);
free(cmd);
这是短键“ foo”的3次后续运行的GET测试速度:
59880.24 requests per second
58139.53 requests per second
58479.53 requests per second
这是再次修改源并将密钥更改为“ set-allBooksBelongToUser:1234567890”后的GET测试速度:
60240.96 requests per second
60606.06 requests per second
58479.53 requests per second
再一次改变的关键在于“ipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumlorem:1234567890”给出了这样的:
58479.53 requests per second
58139.53 requests per second
56179.77 requests per second
因此,即使是非常长的键也不会对Redis的速度产生重大影响。这是在GET上的O(1)操作。更复杂的操作对此甚至不那么敏感。
我认为,拥有可以清楚地识别出它们所持有的价值的钥匙大大超过了您从缩写钥匙中获得的任何微不足道的速度性能。
如果您想进一步说明这一点,那么-r [keyspacelen]
redis-
benchmark实用程序上还有一个参数,可以让它创建随机密钥(只要它们中包含’:rand:’),您就可以在其中增加前缀的大小。测试代码到您想要的长度。
问题内容: 我正在使用MySQL + Hibernate。 MySQL表名长度和列名长度会影响应用程序性能吗? 例如) 哪个更好 ? 问题答案: 不,它不会,在任何程度上都无法衡量。 花更多的精力使您的架构易于理解。从长远(短期)来看,您获得的收益将超过使用较短且难以理解的模式名称所获得的无法衡量的飞秒。
假设我定义了两个包(都是perl类和对象) 和 .当上述类的实例访问它们的方法时,会有性能差异吗?我认为“长包名”会导致性能差异,因为perl在方法解析期间会对名称进行字符串比较。 由于在上述方法调用中会有名称解析,第一个(由于名称较短)将比第二个包名方法调用表现出更好的性能。 推测:perl不保留包名的哈希值,并且(在内部)与它们进行比较吗?
问题内容: 在SQL Server中使用完全限定的表名是否会对性能产生影响? 我有一个查询,在这里我要连接不同数据库中的两个表。DBA建议在主机查询中省略数据库名称,我猜这是出于性能或惯例的考虑。 所有表完全合格 首选? 这实际上有区别吗? 问题答案: 通常最好使用完全限定的名称,但要考虑一些注意事项。我会说这在很大程度上取决于要求,并且一个答案可能无法满足所有情况。 请注意,这只是一个编译绑定,
问题内容: 在我的公司中,我们有一个包含各种表的遗留数据库,因此包含许多字段。 许多字段似乎都有从未达到的大限制(例如:)。 是否将字段的最大宽度设置为最大宽度或比通常输入的字段大2到3倍会对性能产生负面影响? 一个应如何在性能与字段长度之间取得平衡?有平衡吗? 问题答案: 这个问题有两个部分: 在VARCHAR上使用NVARCHAR是否会损害性能?是的,将数据存储在unicode字段中会使存储需
本文向大家介绍使用匿名函数会影响性能吗?,包括了使用匿名函数会影响性能吗?的使用技巧和注意事项,需要的朋友参考一下 从某种意义上说,使用匿名函数会影响性能,您需要在每次迭代时创建一个新的函数对象。匿名函数始终使用变量名加载。顾名思义,匿名允许创建没有任何名称标识符的函数。它可以用作其他函数的参数。使用变量名调用它们- 示例 这就是可以使用JavaScript匿名函数的方式- 这是一个例子-
问题内容: varchar列上的索引是否会使查询运行缓慢?我可以将其设为int。而且我不需要做LIKE%比较。 问题答案: varchar列上的索引是否会使查询运行缓慢? 不,不是的。 如果优化器决定使用索引,则查询将运行得更快。 该表上的s / s / s会变慢,但不太可能引起注意。 我不需要做LIKE%比较 请注意,使用: …将 不 使用索引,但以下内容将: 关键是在字符串的左侧使用通配符,这