应该在很多地方共享redis集群客户端,对吗?与谷歌,所以我使用RedisCli对象:
object RedisCli {
val jedisClusterNodes = new java.util.HashSet[HostAndPort]()
jedisClusterNodes.add(new HostAndPort("192.168.1.100", 6379))
lazy val jedisCluster = new JedisCluster(jedisClusterNodes)
//...method with jedisCluster
}
问题是如何初始化jedisCluster
对象 - 我想在其他对象的main
方法中初始化HostAndPort,从属性文件中获取ip命令行传递的文件。我应该在我的环境中使用class RedisCli
吗?
我认为我完全迷失在课堂和对象中。
答案 0 :(得分:2)
在Scala中,应定义单个对象的所有成员。虽然您可以从外部修改var成员,但退后一步并问自己,如果每个客户端都可以修改其成员,那么在您的案例中有一个单例对象是什么意思?你最终只会得到意大利面条代码。
我强烈建议使用依赖注入框架(例如Spring),您可以在特定位置创建bean,然后将它们注入您需要的位置。
简而言之,当您想要定义方法和值(从未见过使用var的情况)时,应该使用singleton objects,这些方法和值并非特定于每个类的实例(想想Java)静态的)。在您的情况下,您似乎想要不同的实例(否则为什么要从客户端代码设置它们),但希望在不同的客户端之间共享某个实例,这正是依赖注入允许您执行的操作。
如果您不想使用DI框架并且可以让客户端随意修改您的实例,那么只需使用类而不是对象。使用class关键字时,可以实例化不同的实例。
class RedisCli(val ip: String, val port: Int) {
val hostAndPort: HostAndPort = new HostAndPort(ip, port)
etc...
}
希望这有帮助。