我想要有关使用PooledRedisClientManager()连接到Ubuntu虚拟机上的远程Redis实例的一些建议。
我试过PooledRedisClientManager pCm = new PooledRedisClientManager(new [] {“ xxx.xxx.xx:6379”}); 但得到例外"could not connect to redis Instance at xxx.xxx.x.x:6379"
首先,确保将Redis服务器配置为在网络可访问IP上运行。确保您已更改redis.conf
bind
以下行:
绑定127.0.0.1
至
绑定192.168.0.1
其中192.168.0.1是Redis服务器的主机名/ IP。
否则,您将只能在本地访问Redis服务器。您应避免使用0.0.0.0代替本地IP,以防止Redis绑定到任何公共接口,从而将其暴露给Internet。(除非受到防火墙保护)
如果在应用程序服务器上安装了Redis客户端,则可以通过从终端运行以下命令来检查Redis服务器是否可访问:
redis-cli -h 192.168.0.1 ping
在此,此答案将逐步诊断连接问题。
如果连接时仍然出现异常,请确保您的应用程序计算机上的防火墙允许建立传出连接,而在Redis服务上,防火墙允许来自应用程序服务器的该端口上的传入连接。Ubuntu使用IPTables进行防火墙。
除了实际的Redis Server的配置问题之外,使用它的方式应该没有任何问题。
// Where 192.168.0.1 is the hostname/IP of your Redis server
var pcm = new PooledRedisClientManager(new[] {"192.168.0.1:6379"});
var client = pcm.GetCacheClient();
PooledRedisClientManager
要注入的:假设您正在使用ServiceStack的依赖注入的标准方法,则需要连接App Configuration,以将客户端管理器注入到Service
基类中。这使得Redis可用于每个请求。因此,在您的AppHost配置中:
// Where 192.168.0.1 is the hostname/IP of your Redis server
container.Register<IRedisClientsManager>(c => new PooledRedisClientManager("192.168.0.1:6379"));
// Register Redis cache client to be injected as ICacheClient, using pooled manager, registered above
container.Register<ICacheClient>(c => c.Resolve<IRedisClientsManager>().GetCacheClient());
注入池后,当您分别在或调用时,标准ICacheClient
和IRedisClient
将自动连接。因此,使用Redis不需要进一步的配置。base.Cache
base.Redis
Service
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句