package redis import ( "context" "encoding/json" "fmt" "fwh-toolbox-server/cache" "fwh-toolbox-server/utils/minio" ) var ( autoUpdateConfigCtx = context.Background() autoUpdateConfigPrefix = "fwhtoolbox:autoUpdateConfig:" ) func RefreshAutoUpdateConfigFileInfo(objList []minio.MinioFileObject) error { key := autoUpdateConfigPrefix + "fileInfo" values := make([]interface{}, 0, len(objList)) // 清空整个 List // LTrim start>stop => 清空 if err := cache.LTrim(autoUpdateConfigCtx, key, 1, 0); err != nil { return err } for _, obj := range objList { b, err := json.Marshal(obj) if err != nil { return err } values = append(values, b) } // 右插入(顺序保持) return cache.RPush(autoUpdateConfigCtx, key, values...) } func GetAutoUpdateConfigFileInfoTotal() (int64, error) { key := autoUpdateConfigPrefix + "fileInfo" return cache.LLen(autoUpdateConfigCtx, key) } // page 从1开始 func GetAutoUpdateConfigFileInfoByPage(page uint, size uint) ([]minio.MinioFileObject, error) { total, err := GetAutoUpdateConfigFileInfoTotal() if err != nil { return nil, err } if page < 1 { return nil, fmt.Errorf("param page error(page = %d).", page) } if size < 1 { return nil, fmt.Errorf("param size error(size = %d).", size) } key := autoUpdateConfigPrefix + "fileInfo" // start := int64((page - 1) * size) // stop := int64(page*size - 1) start := total - int64((page-1)*size) - 1 stop := total - int64(page*size) if start < 0 { return nil, fmt.Errorf("param page too large(page = %d).", page) } if stop < 0 { stop = 0 } // 倒序查询,start和stop调换 strData, err := cache.LRange(autoUpdateConfigCtx, key, stop, start) if err != nil { return nil, err } objects := make([]minio.MinioFileObject, 0, len(strData)) // for _, s := range strData { // 倒转数组,因为 LRange 是从左到右,这里要倒序 for i := len(strData) - 1; i >= 0; i-- { var obj minio.MinioFileObject s := strData[i] if err := json.Unmarshal([]byte(s), &obj); err != nil { return nil, err } objects = append(objects, obj) } return objects, nil }