我想要一些关于使用PooledRedisClientManager()连接到Ubuntu虚拟盒上的远程Redis实例的建议。
我试过了
PooledRedisClientManager pCm = new PooledRedisClientManager(new [] {“xxx.xxx.x.x:6379”});
但得到例外"could not connect to redis Instance at xxx.xxx.x.x:6379"
答案 0 :(得分:4)
首先确保将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
This answer here逐步完成诊断连接问题的过程。
如果在连接时仍然遇到异常,请确保应用程序计算机上的防火墙允许建立传出连接,并且在Redis服务上,防火墙允许来自应用程序服务器的该端口上的传入连接。 Ubuntu使用IPTables进行防火墙。
除了实际Redis服务器的配置问题之外,您不应该像使用它一样使用它。
// 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());
注入游泳池后,当您{{1}内分别拨打ICacheClient
或IRedisClient
时,标准base.Cache
和base.Redis
会自动连线}}。因此,使用Redis无需进一步配置。