gpt4 book ai didi

java - 单例模式是 RedissonClient 的一个很好的用例吗?

转载 作者:IT王子 更新时间:2023-10-29 06:09:49 27 4
gpt4 key购买 nike

我正在通过 Jetty/CometD 运行一个长时间运行的 Web 服务,我正在使用 Redisson 库连接到 Redis。我正在使用单例模式来获取我的 RedissonClient/连接,我不确定这是否是最好的方法。

类看起来像这样:

public class RedisClient {
// singleton instance of our RedisonClient/connection
private static RedissonClient _redissonInstance;
public static String REDIS_HOST = "my.redishost.com:6379";


private static RedissonClient setupRedis() {
org.redisson.Config config = new org.redisson.Config();

config.useSingleServer()
.setAddress(REDIS_HOST)
.setConnectionPoolSize(200);

return Redisson.create(config);
}

public static RedissonClient getRedis() {
if (_redissonInstance == null) {
_redissonInstance = setupRedis();
}
return _redissonInstance;
}

public static void setRedisHost(String redisHost) {
_logger.warn("Setting REDIS_HOST to: " + redisHost);
REDIS_HOST = redisHost;
}
}

最佳答案

我会说这是个坏主意。我不认为单例通常是一个好主意,但即便如此,这也不是一个好方法。您的代码不是线程安全的,并且您似乎想要支持多个主机。

如果你真的不想将你的 redis 客户端传递给每个组件并且你的主机不会改变并且想要一些快速而肮脏的东西试试这个:

public class Redis {
public static final RedissonClient CLIENT;
static {
Config config = new Config();
config.useSingleServer()
.setAddress("my.redishost.com:6379")
.setConnectionPoolSize(200);
CLIENT = Redisson.create(config);
}
}

这有线程安全的好处,在获取引用时无需任何同步。

关于java - 单例模式是 RedissonClient 的一个很好的用例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35755118/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com