Skip to content

Commit 75e6180

Browse files
author
zicorn
committed
[add] redis新增cluster与sentinel
- cluster已经过测试,sentinel暂未测试
1 parent 5193a3f commit 75e6180

4 files changed

Lines changed: 330 additions & 75 deletions

File tree

internal/core/plugin_manager/manager.go

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -175,14 +175,44 @@ func (p *PluginManager) Launch(configuration *app.Config) {
175175
log.Info("start plugin manager daemon...")
176176

177177
// init redis client
178-
if err := cache.InitRedisClient(
179-
fmt.Sprintf("%s:%d", configuration.RedisHost, configuration.RedisPort),
180-
configuration.RedisUser,
181-
configuration.RedisPass,
182-
configuration.RedisUseSsl,
183-
configuration.RedisDB,
184-
); err != nil {
185-
log.Panic("init redis client failed: %s", err.Error())
178+
if configuration.RedisUseSentinel {
179+
// use redis sentinel mode
180+
if err := cache.InitRedisSentinelClient(
181+
configuration.RedisSentinelServiceName,
182+
configuration.RedisSentinels,
183+
configuration.RedisUser, // 对主从服务器使用原有的用户名
184+
configuration.RedisPass, // 对主从服务器使用原有的密码
185+
configuration.RedisSentinelUsername, // 连接哨兵服务器的用户名
186+
configuration.RedisSentinelPassword, // 连接哨兵服务器的密码
187+
configuration.RedisUseSsl,
188+
configuration.RedisDB,
189+
configuration.RedisSentinelSocketTimeout,
190+
); err != nil {
191+
log.Panic("init redis sentinel client failed: %s", err.Error())
192+
}
193+
log.Info("redis sentinel client initialized")
194+
} else if configuration.RedisUseClusters {
195+
// use redis cluster mode
196+
if err := cache.InitRedisClusterClient(
197+
configuration.RedisClusters,
198+
configuration.RedisClustersPassword,
199+
configuration.RedisUseSsl,
200+
); err != nil {
201+
log.Panic("init redis cluster client failed: %s", err.Error())
202+
}
203+
log.Info("redis cluster client initialized")
204+
} else {
205+
// use redis standalone mode
206+
if err := cache.InitRedisClient(
207+
fmt.Sprintf("%s:%d", configuration.RedisHost, configuration.RedisPort),
208+
configuration.RedisUser,
209+
configuration.RedisPass,
210+
configuration.RedisUseSsl,
211+
configuration.RedisDB,
212+
); err != nil {
213+
log.Panic("init redis client failed: %s", err.Error())
214+
}
215+
log.Info("redis standalone client initialized")
186216
}
187217

188218
invocation, err := real.NewDifyInvocationDaemon(

internal/types/app/config.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,26 @@ type Config struct {
7272
RoutinePoolSize int `envconfig:"ROUTINE_POOL_SIZE" validate:"required"`
7373

7474
// redis
75-
RedisHost string `envconfig:"REDIS_HOST" validate:"required"`
76-
RedisPort uint16 `envconfig:"REDIS_PORT" validate:"required"`
75+
RedisHost string `envconfig:"REDIS_HOST"`
76+
RedisPort uint16 `envconfig:"REDIS_PORT"`
7777
RedisPass string `envconfig:"REDIS_PASSWORD"`
7878
RedisUser string `envconfig:"REDIS_USERNAME"`
7979
RedisUseSsl bool `envconfig:"REDIS_USE_SSL"`
8080
RedisDB int `envconfig:"REDIS_DB"`
8181

82+
// redis clusters
83+
RedisUseClusters bool `envconfig:"REDIS_USE_CLUSTERS"`
84+
RedisClusters []string `envconfig:"REDIS_CLUSTERS"`
85+
RedisClustersPassword string `envconfig:"REDIS_CLUSTERS_PASSWORD"`
86+
87+
// redis sentinel
88+
RedisUseSentinel bool `envconfig:"REDIS_USE_SENTINEL"`
89+
RedisSentinels []string `envconfig:"REDIS_SENTINELS"`
90+
RedisSentinelServiceName string `envconfig:"REDIS_SENTINEL_SERVICE_NAME"`
91+
RedisSentinelUsername string `envconfig:"REDIS_SENTINEL_USERNAME"`
92+
RedisSentinelPassword string `envconfig:"REDIS_SENTINEL_PASSWORD"`
93+
RedisSentinelSocketTimeout float64 `envconfig:"REDIS_SENTINEL_SOCKET_TIMEOUT" default:"0.1"`
94+
8295
// database
8396
DBType string `envconfig:"DB_TYPE" default:"postgresql"`
8497
DBUsername string `envconfig:"DB_USERNAME" validate:"required"`

0 commit comments

Comments
 (0)