gpt4 book ai didi

Redis SELECT 性能

转载 作者:IT王子 更新时间:2023-10-29 05:59:01 111 4
gpt4 key购买 nike

我将 redis 与多个数据库一起使用(我通过 SELECT 命令切换)。

我正在将不同类型的信息存储到 redis 中,我需要以某种方式将它们分开。我不喜欢为键添加前缀来区分信息类型,所以我创建了更多数据库。

我想问一下这是否是一个正确的决定,考虑到性能?

另外,SELECT 会导致多少开销?如果我需要从两个数据库中遍历一些相关数据,哪种方法更好(见伪代码)?

for data in array {
redis_select(0)
k = redis_get(...)
redis_select(1)
k2 = redis_get(k)
}

redis_select(0)
k = []
for data in array {
k[x] = redis_get(...)
}

redis_select(1)
k2 = []
for data in array {
k2[x] = redis_get(k[x])
}

最佳答案

您可以使用 Redis 数据库概念来分离数据。当前版本完全支持,以后的版本也将继续支持。

现在,这不是隔离数据的推荐解决方案。最好运行多个 Redis 实例。一个实例的开销非常低(小于 1 MB),因此您可以在任何一台机器上启动多个实例。它更具可扩展性(工作负载将分布在多个 CPU 内核上,而不仅仅是一个)。它更灵活(您可能希望对每个数据集使用不同的配置参数,或使用不同的转储文件)。您的客户端只需为每个实例打开一个连接即可访问各种数据集。

现在,如果您仍想使用 Redis 数据库,并且关心性能,则需要评估它们所代表的额外往返次数。对于像 Redis 这样的内存数据库,所有基本操作的成本几乎是一样的,因为它主要是通信和协议(protocol)管理,而不是执行本身。因此,当键/值较小时,GET、SET、SELECT 命令往往具有相同的成本。每次执行 SELECT 时,就像执行额外的 GET 或 SET 命令一样。

以您的示例为例,第一个提议将为数组的每个项目生成 4 个命令。第二个提案将为每个项目仅生成 2 个命令,因此效率更高。如果项目数量很大,SELECT 的成本在第二个提案中可以忽略不计,而在第一个提案中则不是。

如果您计划在数组上迭代以运行 Redis 命令,请考虑使用可变参数命令(例如 MGET/MSET)或流水线(如果您的客户端支持),以减少往返的一般次数。

关于Redis SELECT 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805004/

111 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com