我正在设计一个将Redis用作数据库的Web服务,并且我想了解使用Redis与StackService客户端连接的最佳实践。
关键是我一直在阅读有关Redis的文章,发现与服务器交互的最佳方法是使用单个并发连接。
问题是,尽管每当Web客户端向Web服务发出请求时,我都会使用 PooledRedisClientManager
,但我又获得了一个到Redis服务器的连接客户端(打开的连接),并且此连接客户端的数量增加了,而又不限制消耗更多更多的内存。
示例“故障”代码:
PooledRedisClientManager pooledClientManager = new PooledRedisClientManager("localhost");
var redisClient = pooledClientManager.GetClient();
using (redisClient)
{
redisClient.Set("key1", "value1");
}
我要解决的问题是创建一个使用静态RedisClient
var
实现单例模式的类;如果redisClient
未初始化,则会创建一个新的,如果是,则返回已初始化的一个。
解:
public class CustomRedisPooledClient
{
private static CustomRedisPooledClient _instance = null;
public RedisClient redisClient = null;
// Objeto sincronización para hacer el Lock
private static object syncLock = new object();
private CustomRedisPooledClient()
{
redisClient = new RedisClient("localhost");
}
public static CustomRedisPooledClient GetPooledClient()
{
if (_instance == null)
{
lock (syncLock)
{
if (_instance == null)
{
_instance = new CustomRedisPooledClient();
}
}
}
return _instance;
}
}
CustomRedisPooledClient customRedisPooledClient = CustomRedisPooledClient.GetPooledClient();
using (customRedisPooledClient.redisClient)
{
customRedisPooledClient.redisClient.Set("key1", "value1");
}
这是一个好习惯吗?
先感谢您!
我用过PooledRedisClientManager
并且工作正常:
我只运行一次的 示例代码:
static PooledRedisClientManager pooledClientManager = new PooledRedisClientManager("localhost");
和我在许多线程上运行的代码:
var redisClient = pooledClientManager.GetClient();
using (redisClient)
{
redisClient.Set("key" + i.ToString(), "value1");
}
而且我只有11个客户端连接到服务器。
执行kafka客户端的生产者/消费者连接池有意义吗? kafka是否在内部维护已初始化并准备好使用的连接对象列表? 我们希望最小化连接创建的时间,这样在发送/接收消息时就不会有额外的开销。 目前,我们正在使用apache共享池库来保持连接。 任何帮助都将不胜感激。
我试图理解netty http客户端连接池。如果是NIO和异步的,那么这个连接池的意义是什么? 例如:如果服务A调用服务B,并且服务A的客户端连接池计数设置为50,那么这是否意味着我们最多只能发出50个并行请求? 更新: 我在3.5秒内完成了所有通话。理想情况下,有一个连接,我应该在150秒内完成。
我对Google Cloud Bigtable做了一个负载测试,制作了一个虚拟的web应用程序,用于处理向Bigtable写入数据和从Bigtable读取数据的请求。一开始,我只使用一个Bigtable连接作为单例,并跨所有线程(请求)重用它。当我增加请求数量时,我注意到性能正在变慢。不知何故,我没有增加节点的数量,而是想到了创建多个Bigtable连接,然后将它们随机分配给任何线程,从而提高了性
出身背景 我需要连接到不同客户端的服务器。 每个客户端连接应该使用唯一的TLS证书。 服务器上的MTLS已就位。 我想使用连池来提高延迟。 使用以下超文本传输协议客户端 我的假设当管理连接池中的连接时,当选择连接时,在选择连接池中的相同连接之前应该考虑客户端证书。我不希望连接为clientA使用clientB TLS证书,反之亦然。 问题是这个假设是真的吗? 情景1) 我将每条路线的最大连接数设置
在Netty中创建客户端连接时,我有一个问题。 这里,为什么我们没有一个bind方法,将通道绑定到发起客户端连接的端口(在客户端)?我们唯一需要提供的就是给出服务器地址和端口如下: 这是在客户端还是服务器端创建了一个新的通道?此通道绑定在客户端的哪个端口? 我们在执行服务器端引导时进行绑定,如下所示 我很困惑,不明白客户端从哪个端口向服务器发送数据,使用的是什么通道?
我对连接池有一些疑问。在SQL Server连接池文章中提到的内容类似于“打开新连接时,如果连接字符串与现有池不完全匹配,则会创建一个新池。每个进程、每个应用程序域、每个连接字符串以及使用集成安全性时、每个Windows标识将连接池化。” 现在我有了自己的windows窗体应用程序,它具有SQL连接。 > 所以当我打开应用程序时,SQL连接首次打开,并创建了一个池。所以,如果我关闭应用程序池会被自