Mostafa Lavaei Asked: 2024-01-23 03:29:46 +0800 CST2024-01-23 03:29:46 +0800 CST 2024-01-23 03:29:46 +0800 CST Redis池有什么好处? 772 Redis是一个单线程数据库(用于主要操作)。当操作在服务器端一一处理时,创建多个连接(连接池)有什么好处呢?我们可以简单地创建一个连接并在所有线程之间共享它。 redis 1 个回答 Voted Best Answer slorello 2024-01-23T05:05:48+08:002024-01-23T05:05:48+08:00 最重要的是,这确实取决于,并且主要取决于您正在使用的客户端。 连接池的案例 是的,Redis 是单线程的,是的,您可以将相同的连接传递到应用程序的其他部分并重用它。然而,这里缺少的重要一点是,真正让您使用 Redis 的是延迟。假设您的应用程序中有一个命令(为简单起见)从开始到结束大约需要 2.01 毫秒。 1ms 是发送到 Redis 的延迟 0.01ms 是在 Redis 中执行的命令 1ms 是从 Redis 返回的延迟 绝大多数时间(2.01ms 中的 2ms)Redis 的主线程没有使用,因此 2ms 基本上被浪费了。如果您传递的套接字在命令执行时不可重入,那么您将被阻止,直到命令完成向 Redis 发送其他任何内容。 这就是为什么您要使用连接池,以允许应用程序的多个部分同时向 Redis 发送命令。 有些客户通常不需要它们 您必须在这里做出一个非常重要的警告。客户端可以通过管道向 Redis 命令,使用相同的往返向 Redis 发送多个命令,并且某些客户端在管理此方面做得非常出色。 例如,主要的通用 .NET Redis 客户端StackExchange.Redis多路复用通过一个连接发送给它的所有命令,并尽可能多地进行管道传输。在这种情况下,与应用程序可以发送的时间相比,浪费的 Redis 时间相对较少。Node Redis 做了类似的事情,自动管道化它在同一时间点内获得的所有内容。对于此类客户端,如果没有令人信服的原因,通常不需要池化连接(例如,通过网络传输的非常大的对象可能会阻止其他命令的执行。)
最重要的是,这确实取决于,并且主要取决于您正在使用的客户端。
连接池的案例
是的,Redis 是单线程的,是的,您可以将相同的连接传递到应用程序的其他部分并重用它。然而,这里缺少的重要一点是,真正让您使用 Redis 的是延迟。假设您的应用程序中有一个命令(为简单起见)从开始到结束大约需要 2.01 毫秒。
1ms 是发送到 Redis 的延迟 0.01ms 是在 Redis 中执行的命令 1ms 是从 Redis 返回的延迟
绝大多数时间(2.01ms 中的 2ms)Redis 的主线程没有使用,因此 2ms 基本上被浪费了。如果您传递的套接字在命令执行时不可重入,那么您将被阻止,直到命令完成向 Redis 发送其他任何内容。
这就是为什么您要使用连接池,以允许应用程序的多个部分同时向 Redis 发送命令。
有些客户通常不需要它们
您必须在这里做出一个非常重要的警告。客户端可以通过管道向 Redis 命令,使用相同的往返向 Redis 发送多个命令,并且某些客户端在管理此方面做得非常出色。
例如,主要的通用 .NET Redis 客户端StackExchange.Redis多路复用通过一个连接发送给它的所有命令,并尽可能多地进行管道传输。在这种情况下,与应用程序可以发送的时间相比,浪费的 Redis 时间相对较少。Node Redis 做了类似的事情,自动管道化它在同一时间点内获得的所有内容。对于此类客户端,如果没有令人信服的原因,通常不需要池化连接(例如,通过网络传输的非常大的对象可能会阻止其他命令的执行。)