/
iezhelev
/
cppsh_micro
Обзор
Документация
Войти
/
iezhelev
/
cppsh_micro
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
pkg/flags/flags.go
46 строк
1 KB
iezhelev
global flags manager based on redis
22 апр 2025, 11:36
22 апр 2025, 11:36
61be575
Код
Авторство
О чём код?
package flags import ( "context" "github.com/go-redis/redis/v8" ) // Use Redis for cross-service flag persistence type RedisFlagManager struct { client *redis.Client } func NewRedisFlagManager(addr string) *RedisFlagManager { return &RedisFlagManager{ client: redis.NewClient(&redis.Options{Addr: addr}), } } func (rfm *RedisFlagManager) SetFlag(name string, value bool) error { return rfm.client.Set(context.Background(), name, value, 0).Err() } func (rfm *RedisFlagManager) GetFlag(name string) (bool, error) { val, err := rfm.client.Get(context.Background(), name).Bool() if err == redis.Nil { return false, nil } return val, err } func (rfm *RedisFlagManager) WatchFlag(ctx context.Context, name string) <-chan bool { ch := make(chan bool) pubsub := rfm.client.Subscribe(ctx, "__keyspace@0__:"+name) go func() { defer pubsub.Close() for msg := range pubsub.Channel() { if msg.Payload == "set" { val, _ := rfm.GetFlag(name) ch <- val } } }() return ch }