- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想要一些关于使用 PooledRedisClientManager() 连接到 Ubuntu 虚拟机上的远程 Redis 实例的建议。
我试过了PooledRedisClientManager pCm = new PooledRedisClientManager(new[] {"xxx.xxx.x.x:6379"});但出现异常 “无法连接到 xxx.xxx.x.x:6379 的 redis 实例”
最佳答案
首先确保您的 Redis 服务器配置为在网络可访问的 IP 上运行。确保您更改了 redis.conf
bind
行:
bind 127.0.0.1
到
bind 192.168.0.1
192.168.0.1 是您的 Redis 服务器的主机名/IP。
否则您将只能在本地访问Redis 服务器。 您应该避免使用 0.0.0.0 代替您的本地 IP,以防止 Redis 绑定(bind)到任何公共(public)接口(interface),从而将其暴露在互联网上。 (除非受防火墙保护)
如果您的应用程序服务器上安装了 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 的标准依赖注入(inject)方法,您将需要连接您的应用程序配置以将客户端管理器注入(inject)您的 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());
注入(inject)池后,当您调用 base.Cache
或 时,标准的
,分别在您的 ICacheClient
和 IRedisClient
将自动连接>base.RedisService
中。因此,使用 Redis 不需要进一步的配置。
关于c# - 使用 PooledRedisClientManager() 连接到 Ubuntu 虚拟机上的远程 Redis 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21038964/
我是一名优秀的程序员,十分优秀!