Skip to content

Commit c48f002

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

File tree

4 files changed

+330
-75
lines changed

4 files changed

+330
-75
lines changed

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
@@ -71,13 +71,26 @@ type Config struct {
7171
RoutinePoolSize int `envconfig:"ROUTINE_POOL_SIZE" validate:"required"`
7272

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

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

0 commit comments

Comments
 (0)