package scene import ( "context" "fmt" "github.com/gogf/gf/v2/database/gredis" ) const ( scenePrefix = "scene-manager:alarm:" dataExpires = 7200 ) type GetSceneParams struct { Type string `json:"type"` Name string `json:"name"` DeviceCode string `json:"device_code"` } type InfoScene struct { Id string `json:"id"` Name string `json:"name"` Status int `json:"status"` Action string `json:"action"` Desc string `json:"desc"` SceneType string `json:"scene_type"` DeviceType string `json:"device_type"` Config string `json:"config"` Time string `json:"time"` } type Info struct { Key string `json:"key"` SceneId string `json:"scene_id"` TaskId string `json:"task_id"` Config string `json:"config"` } type Manager struct { redisClient *gredis.Redis ctx context.Context } func NewSceneManager(host string, port int) *Manager { red, _ := gredis.New(&gredis.Config{ Address: fmt.Sprintf("%s:%d", host, port), Db: 2, MaxActive: 100, }) ctx := context.Background() helper := &Manager{ redisClient: red, ctx: ctx, } return helper } func (a *Manager) SaveScene(info *Info) error { _, err := a.redisClient.Do(a.ctx, "SET", info.Key, info.Config) if err != nil { return err } _, err = a.redisClient.Do(a.ctx, info.Key, dataExpires) if err != nil { return err } return nil } func (a *Manager) GetScene(key string) (string, error) { // get status from redis result, err := a.redisClient.Do(a.ctx, "GET", key) if err != nil { return "", err } return result.String(), nil } func (a *Manager) DeleteScene(key string) error { // get status from redis _, err := a.redisClient.Do(a.ctx, "DEL", key) if err != nil { return err } return nil } // ScanKeys 扫描所有匹配的key //func (a *Manager) ScanKeys(pattern string) ([]string, error) { // var cursor uint64 // var allKeys []string // for { // // 扫描一批匹配的key // _, err := a.redisClient.Do("Scan", cursor, pattern, 100) // if err != nil { // return nil, err // } // allKeys = append(allKeys, keys...) // cursor = nextCursor // // 游标归0时结束迭代 // if cursor == 0 { // break // } // } // return allKeys, nil //}